小编典典
Java 9
Optional.stream 已添加到JDK9。这使你无需任何帮助程序方法即可执行以下操作:
Optional result =
things.stream()
.map(this::resolve)
.flatMap(Optional::stream)
.findFirst();
Java 8
是的,这是API中的一个小漏洞,因为将Optional转换为长度为零或一的Stream有点不方便。你可以这样做:
Optional result =
things.stream()
.map(this::resolve)
.flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
.findFirst();
但是,在flatMap中使用三元运算符比较麻烦,因此最好编写一些辅助函数来完成此操作:
/**
* Turns an Optional into a Stream of length zero or one depending upon
* whether a value is present.
*/
static Stream streamopt(Optional opt) {
if (opt.isPresent())
return Stream.of(opt.get());
else
return Stream.empty();
}
Optional result =
things.stream()
.flatMap(t -> streamopt(resolve(t)))
.findFirst();
在这里,我内联了对resolve()的调用,而不是进行单独的map()操作,但这只是一个问题。
2020-03-13