将可选值转换为列表

Ste*_*erl 4 java java-stream java-11

我想将 an 收集Optional到 a 中List,这样如果可选项存在,我最终会得到一个包含单个元素的列表,如果不存在,则得到一个空列表。

我想到的唯一方法(在 Java 11 中)是通过 Stream:

var maybe = Optional.of("Maybe");
var list = maybe.stream().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

我知道,无论如何这应该相当有效,但我想知道是否有一种更简单的方法可以在不使用中间流的情况下将可选转换为列表?

Fed*_*ner 5

我认为最惯用的方法是使用Optional.map

var maybe = Optional.of("Maybe");
var list = maybe.map(List::of).orElse(Collections.emptyList());
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想创建一个最终可能不会被使用的空列表:

var list = maybe.map(List::of).orElseGet(Collections::emptyList);
Run Code Online (Sandbox Code Playgroud)