jwi*_*ner 6 java java-stream option-type
假设您有一个流Optional<T>,您想要触发一个Consumer<T>流(如果存在)。
处理这个问题最优雅的方法是什么?
我可以通过过滤Optional::isPresent和映射来进行管理Optional::isGet,但这看起来很“hacky”并且不符合以下精神Optional:
Stream.of(a, b, c, d)
.filter(Optional::isPresent)
.map(Optional::get)
.findFirst()
.ifPresent(s -> System.out.println("This was cumbersome: " + s));
Run Code Online (Sandbox Code Playgroud)
我同意这很麻烦,但它可能是最直接的解决方案,而不会变得更麻烦。
我在类似情况下做过的一件事是创建一种方法将 an 转换Optional为 a Stream:
private Stream<T> optionalStream(Optional<T> optional) {
if (optional.isPresent())
return Stream.of(optional.get());
else
return Stream.empty());
}
Run Code Online (Sandbox Code Playgroud)
所以你可以使用flatMap:
Stream.of(a, b, c, d)
.flatMap(this::optionalStream).findFirst()...
Run Code Online (Sandbox Code Playgroud)
从 Java 9 开始,Stream添加了该方法Optional来执行此操作,因此您可以使用:
Stream.of(a, b, c, d)
.flatMap(Optional::stream)
.findFirst()...
Run Code Online (Sandbox Code Playgroud)
但说实话,我不确定这是否比您filter当时的map解决方案简单得多。
| 归档时间: |
|
| 查看次数: |
3608 次 |
| 最近记录: |