java - 将 ifPresent 添加到流
问题描述
如果传真不存在,我应该在哪里将 ifPresert() 应用于我的流以不抛出 NullPointerExpetion?
deptUserMap.get("Collection").stream()
.filter(u->u.getTitle().equals("Tester"))
.findFirst()
.orElse(new User())
.getFax());
解决方案
您将返回 null 或用户传真:
Optional<String> userFax = deptUserMap.getOrDefault("Collection", Collections.emptyLis())
.stream()
.filter(u->Objects.equals("Tester", u.getTitle())) // in case title is null
.findFirst()
.map(User::getFax);
如果需要,现在您可以打开 Optional 的包装userFax.orElse(null)
如果您在第一行面对 NPE,则意味着 deptUserMap 映射中没有“Collection”键。从JDK8开始,你可以使用getOrDefault来解决这个问题。
推荐阅读
- c# - IPv6 在 Xamarin 应用程序 (C#) 上映射 IP 地址
- angular - ngrx 影响自定义运算符
- reactjs - 反应 setState 竞争条件
- java - Java ForkJoinPool - 队列中的任务顺序
- c++ - 使用 RapidXML 解析大型 XML(大小大于 65 KB)文件时出现问题
- javascript - 浏览器是否有可能缓存图像并且不发出请求?
- java - org.springframework.context.support.GenericApplicationContext 类型无法解析。它是从所需的 .class 文件中间接引用的
- go - 如何在运行已编译的 golang 程序时使用配置文件
- android - 使用 Retrofit2 的响应体为空
- c# - 为什么在单元测试中尝试引用 Moq 对象时出现 NullReferenceException?