将Java 8的Optional与Stream :: flatMap一起使用

将Java 8的Optional与Stream :: flatMap一起使用,第1张

将Java 8的Optional与Stream :: flatMap一起使用

Java 9

Optional.stream 已添加到JDK9。这使你无需任何帮助程序方法即可执行以下 *** 作

Optional<Other> result =    things.stream()          .map(this::resolve)          .flatMap(Optional::stream)          .findFirst();

Java 8

是的,这是API中的一个小漏洞,因为将Optional转换为长度为零或一的Stream有点不方便。你可以这样做:

Optional<Other> result =    things.stream()          .map(this::resolve)          .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())          .findFirst();

但是,在flatMap中使用三元运算符比较麻烦,因此最好编写一些辅助函数来完成此 *** 作:

static <T> Stream<T> streamopt(Optional<T> opt) {    if (opt.isPresent())        return Stream.of(opt.get());    else        return Stream.empty();}Optional<Other> result =    things.stream()          .flatMap(t -> streamopt(resolve(t)))          .findFirst();

在这里,我内联了对

resolve()
调用,而不是进行单独的
map()
*** 作,但这只是一个问题。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4946222.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存