将Optional <t>转换为Stream <t>

时间:2018-05-09 11:16:21

标签: java java-8 java-stream

我想将Optional<T>转换为Stream<T>

  • 如果可选项包含值,则该流包含该值。
  • 如果optional不包含值,则该流应为空。

我想出了以下内容:

public static Stream<T> stream(Optional<T> optional) {
    return optional.map(Stream::of).orElseGet(Stream::empty);
}

有更短的路吗?

4 个答案:

答案 0 :(得分:1)

升级到Java 9,你有一个方法:https://docs.oracle.com/javase/9/docs/api/java/util/Optional.html#stream--

  

public Stream<T> stream​()

     

如果存在值,则返回仅包含该值的顺序Stream,否则返回空Stream

     

自:9

答案 1 :(得分:1)

Optional.of(10).map(Stream::of).orElseGet(Stream::empty);

在Java9中添加了缺少的stream方法,所以代码就是这样编写的,

optional.stream()

答案 2 :(得分:0)

您的代码返回Stream<Stream<T>>。尝试更改为

public static <T> Stream<T> stream(Optional<T> optional) {
    return optional
            .map(t -> Stream.of(t))
            .orElseGet(Stream::empty);
}

答案 3 :(得分:0)

您发布的代码无法编译。你为什么要使用额外的Stream.of(...)?这有效:

public static <T> Stream<T> stream(Optional<T> optional) {
    return optional.map(Stream::of).orElseGet(Stream::empty);
}