【发布时间】:2017-02-16 15:32:52
【问题描述】:
在 Java 8 中是否有更优雅的方法可以实现这一点?
list.stream()
.map(e -> myclass.returnsOptional(e))
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
我说的是filter(Optional::isPresent),然后是map(Optional::get),我想优雅地在列表中收集只有Optional 有价值的结果。
【问题讨论】:
-
对我来说看起来不错。我不确定你不喜欢它的什么。
-
如果您所有的 Optional 都有结果,那么这不再是 Optional 了……而不是返回一个 optional 并检查 isPresent 是否可以返回空值和过滤器,它会缩短一步。
list.stream().map(e -> myclass.returnsObjectOrNull(e)).filter(Objects::nonNull).collect(Collectors.toList()) -
.map(o -> o.map(Stream::of).orElseGet(Stream::empty)) 或在此处查看答案:stackoverflow.com/questions/22725537/…
-
我知道在 java9 中可选的有一个流,所以不是
filter和map,你可以做flatMap(Optional::stream)所以如果没有人有答案,请记住java9 -
看起来不错(我已经使用过这个)。轻微的优雅改进:
.map(myclass::returnsOptional)而不是 lambda
标签: java java-8 java-stream optional