将可选项转换为列表

Converting an Optional to a List

我想将一个 Optional 收集到一个 List 中,这样我最终得到一个只有一个元素的列表,如果存在可选元素,如果不存在则为空列表。

我想出的唯一方法(在 Java 11)是通过流:

var maybe = Optional.of("Maybe");
var list = maybe.stream().collect(Collectors.toList());

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

好的,我就post作为答案。

List.of(maybe.get())。当然,这假设实际上 可选值中存在的值。否则:var list = maybe.isPresent() ? List.of(maybe.get()) : List.of().

是不是更简单了?也许不是。没有中间流吗?是的

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

var maybe = Optional.of("Maybe");
var list = maybe.map(List::of).orElse(Collections.emptyList());

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

var list = maybe.map(List::of).orElseGet(Collections::emptyList);