需要使用java 8在一个复杂对象中获取字符串(可选<;字符串>;)

需要使用java 8在一个复杂对象中获取字符串(可选<;字符串>;),java,java-8,optional,Java,Java 8,Optional,我有一个包含多个列表的对象。所以,我使用map进行了遍历。 一个对象三个列表。使用map遍历,最后使用find first遍历。 是否可以选择单选而不是单选 Optional<Optional<Optional<String>>> 可选 ? 这就是我尝试过的 Optional<Optional<Optional<String>>> myString = myComplexObject.stream()

我有一个包含多个列表的对象。所以,我使用map进行了遍历。 一个对象三个列表。使用map遍历,最后使用find first遍历。 是否可以选择单选而不是单选

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();
可选myString=myComplexObject.stream()
.map(obj1->obj1.getObj2().stream()
.map(obj2->obj2.getObj3().stream())
.filter(obj3->obj3.getMyString().equalsIgnoreCase(“名称”))
.map(obj3->obj3.getMyString())
.findFirst())
.findFirst())
.findFirst();
请使用
flatMap()
,而不是
map()
,提供帮助:


这是我正在尝试的可选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()@Sabarish将其包含在问题中并使其可读。@Sabarish您始终可以作为提出问题的人对其进行编辑和改进,以便其他人阅读。您是否尝试过使用
flatMap
而不是
map
?这样,您就可以映射流,而无需嵌套选项。嵌套选项似乎没有意义,IMHO。我试图创建适当的类来编译OP的代码,但您的解决方案没有在我可以编译OP的代码的地方编译。@Bentaye实际上对于obj3.getMyString使用map()
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();