我经常发现自己编写这样的代码:
return collectionOfOptionals.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.collect(toList());
但有没有办法将这两条中间的两条线压缩成一个操作?
我能做到这一点,但感觉更不令人满意:
return collectionOfOptionals.stream()
.flatMap(o -> o.map(Stream::of).orElseGet(Stream::empty))
.collect(toList());
答案 0 :(得分:2)
基于this question,这似乎可以在Java 9中实现。
return collectionOfOptionals.stream()
.flatMap(Optional::stream)
.collect(toList());
这样更好。但是我已经在Java 8中做了什么。