java - 需要使用 java 8 在一个复杂对象中获取字符串(可选)
问题描述
我有一个包含多个列表的对象。所以,我使用地图遍历。一物三单。使用 map 遍历,最后先使用 find。是否可以使用单个 Optional 而不是
Optional<Optional<Optional<String>>>
??
这是我尝试过的
Optional<Optional<Optional<String>>> myString = myComplexObject.stream()
.map( obj1 -> obj1.getObj2().stream()
.map( obj2 -> obj2.getObj3().stream()
.filter(obj3 -> obj3.getMyString() .equalsIgnoreCase("Name"))
.map(obj3 -> obj3.getMyString())
.findFirst())
.findFirst())
.findFirst();
请帮助
解决方案
而不是map()
,使用flatMap()
:
myComplexObject.stream()
.flatMap(obj1 -> obj1.getObj2().stream()) // Stream of `obj2`
.flatMap(obj2 -> obj2.getObj3().stream()) // Stream of `obj3`
.map(obj3 -> obj3.getMyString()) // Stream of `string`
.filter(s -> s.equalsIgnoreCase("Name"))
.findFirst();
推荐阅读
- node.js - 打字稿nodejs错误:找不到模块'./package.json'
- android - 插页式链接在 web 视图中打开而不是在浏览器中
- php - 使用 laravel 使用 2 列按查询排序
- javascript - 使用带有 sinon.js 的 ES 模块时如何存根常量函数?
- azure - 导入api有重复签名操作azure web api
- oracle - Oracle DBLINK 说明
- java - 无法在 cplex java 的总和上写入变量
- angular - 尝试构建 Angular 5 应用程序。错误:无法解析“/node_modules/rxjs/_esm5”中的“tslib”
- java - 如何使用 SolrJ 检查每个索引的不同分片的哪些 IP 地址已启动并在 Solr 服务器中运行
- reactjs - 在 D3 中 - 同步两组单选按钮并更新反应状态