栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将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()
操作,但这只是一个问题。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/383668.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号