首页 > 解决方案 > 需要使用 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();

请帮助

标签: javajava-8optional

解决方案


而不是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();             

推荐阅读