java - Java 8 流 - 考虑 NULL 将 UUID 列表转换为字符串列表
问题描述
- 我想将 a 设置
List<String>
为 fieldselectedResources
。 getProtectionSet()
返回一个List<ProtectionSet>
- ProtectionSet 有一个字段
List<UUID> resourceIds
,这List<UUID>
=List<String>
我想保存在 selectedResources 中。 getProtectionSet()
是一个列表,但我想从第一个元素中获取值- 我不想有 NPE 异常
- 当任何列表为空时,再往前走是没有意义的。
private Mono<Protection> addProt(Protection protection) {
...
...
MyClass.builder()
.fieldA(...)
.fieldB(...)
.selectedResources( //-->List<String> is expected
protection.getProtectionSet().stream() //List<ProtectionSet>
.filter(Objects::nonNull)
.findFirst()
.map(ProtectionSet::getResourceIds) //List<UUID>
.get()
.map(UUID::toString)
.orElse(null))
.fieldD(...)
如何编写我的流以避免 NPE 异常?
解决方案
尽管您不应该真正面对 aNullPointerException
当前代码,但仍有可能在不确认存在的情况下NoSuchElementException
执行 a 。get
Optional
您应该orElse
提前使用几个阶段,因为我理解问题,以便您map
找到第一个元素并仅流式传输其元素(如果可用):
protection.getProtectionSet().stream() //List<ProtectionSet>
.filter(Objects::nonNull)
.findFirst() // first 'ProtectionSet'
.map(p -> p.getResourceIds()) // Optional<List<UUID>> from that
.orElse(Collections.emptyList()) // here if no such element is found
.stream()
.map(UUID::toString) // map in later stages
.collect(Collectors.toList()) // collect to List<String>
推荐阅读
- javascript - JSON 未定义属性 - 简化验证以避免 TypeErrors
- matlab - 复制图像的行和列
- android - Kotlin:使用不同的子类多次实现泛型接口(基类是约束)
- javascript - jQuery:无法选择附加的选择选项
- flutter - Flutter: Webview_flutter => 从其他页面打开 url
- javascript - 在 JavaScript 中将 2 个数组相乘
- vb.net - 用逗号分隔的总和值 VB.Net
- python - 有没有办法在 matplotlib.pyplot.show() 中选择默认鼠标“模式”作为缩放指针?
- flask-session - 在会话中使用烧瓶 auth.verify_password
- javascript - 让 vscode 理解 p5js