是否有可能过滤掉空的Optionals并使用Java流在一行中映射当前的Optionals?

时间:2017-08-14 17:50:42

标签: java java-8 java-stream

我经常发现自己编写这样的代码:

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());

1 个答案:

答案 0 :(得分:2)

基于this question,这似乎可以在Java 9中实现。

return collectionOfOptionals.stream()
    .flatMap(Optional::stream)
    .collect(toList());

这样更好。但是我已经在Java 8中做了什么。