Flatmapping可选的集合

Vir*_*irx 2 java lambda

所以我有变量Optional<Collection<Student>>,我想使用.findFirst()lambda方法查找Student地址。

我现在做的方式是这样

Optional<Collection<Student>> students = ...;
return students.map(s -> s.stream()
                            .filter(...)
                            .findFirst())
                    .orElse(Optional.empty());
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法可以做到这一点,这样我就不会在地图内部创建流了?

Rad*_*def 5

看来您正在寻找flatMap

students.flatMap(s -> s.stream()
                       .filter(...)
                       .findFirst());
Run Code Online (Sandbox Code Playgroud)

会将映射Optional<Collection<Student>>Optional<Student>而不是Optional<Optional<Student>>