Jor*_*kie 12 java optional java-8 java-stream
我有一个Optional包含列表的对象.我想将此列表中的每个对象映射到另一个列表,并返回结果列表.
那是:
public List<Bar> get(int id) {
Optional<Foo> optfoo = dao.getById(id);
return optfoo.map(foo -> foo.getBazList.stream().map(baz -> baz.getBar()))
}
Run Code Online (Sandbox Code Playgroud)
如果没有溪流内的溪流,有没有一种干净的方式呢?
我认为这flatMap可能是解决方案,但我无法弄清楚如何在这里使用它.
Eug*_*ene 12
没有.flatMap如果Optional是要压扁一个可能Optional<Optional<T>>的Optional<T>.所以这是正确的.
public List<Bar> get(Optional<Foo> foo) {
return foo.map(x -> x.getBazList()
.stream()
.map(Baz::getBar)
.collect(Collectors.toList()))
.orElse(Collections.emptyList());
}
Run Code Online (Sandbox Code Playgroud)
Java 9方法将成为下列方法:
public List<Bar> get(Optional<Foo> foo) {
return foo.map(Foo::getBazList)
.stream()
.flatMap(Collection::stream)
.map(Baz::getBar)
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
也就是说,你应该避免使用Optionals作为参数,请参见此处.