Java 8 流 - 避免 NPE
Java 8 stream - avoid NPE
我想从中获取以下数据:
MyObject.builder()
.lastUpdated(tuple.getT2().isEmpty() ? null : tuple.getT2().get(0).getLastUpdated().toInstant())
...
...
.build()
tuple.getT2().get(0).getLastUpdated()
可以为空...
我试过了:
.lastUpdated(
tuple.getT2().stream()
.map(Optional::ofNullable)
.findFirst()
.flatMap(Function.identity())
.map(metadata -> metadata.getLastUpdated().toInstant()) //NPE
.orElse(null))
但我在行中得到了 NPE
.map(metadata -> metadata.getLastUpdated().toInstant())
map
lambda 并不是 NPE 不会发生的神奇地方。如果你有一个可能为空的东西,你需要映射到它以避免 NPE。替换此调用:
.map(metadata -> metadata.getLastUpdated().toInstant())
和
.map(TypeOfMetadata::getLastUpdated)
.map(TypeOfGetLastUpdated::toInstant)
如果 metadata.getLastUpdated()
为空,这将使其使用 orElse
值。
我想从中获取以下数据:
MyObject.builder()
.lastUpdated(tuple.getT2().isEmpty() ? null : tuple.getT2().get(0).getLastUpdated().toInstant())
...
...
.build()
tuple.getT2().get(0).getLastUpdated()
可以为空...
我试过了:
.lastUpdated(
tuple.getT2().stream()
.map(Optional::ofNullable)
.findFirst()
.flatMap(Function.identity())
.map(metadata -> metadata.getLastUpdated().toInstant()) //NPE
.orElse(null))
但我在行中得到了 NPE
.map(metadata -> metadata.getLastUpdated().toInstant())
map
lambda 并不是 NPE 不会发生的神奇地方。如果你有一个可能为空的东西,你需要映射到它以避免 NPE。替换此调用:
.map(metadata -> metadata.getLastUpdated().toInstant())
和
.map(TypeOfMetadata::getLastUpdated)
.map(TypeOfGetLastUpdated::toInstant)
如果 metadata.getLastUpdated()
为空,这将使其使用 orElse
值。