将可选项转换为列表
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);
我想将一个 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);