Java 将可选列表转换为列表

Java 将可选列表转换为列表,java,java-stream,java-11,Java,Java Stream,Java 11,我想将一个可选的收集到一个列表中,这样我就得到了一个包含单个元素的列表(如果可选的存在),或者一个空列表(如果没有) 我(在Java 11中)想到的唯一方法是通过流: var maybe = Optional.of("Maybe"); var list = maybe.stream().collect(Collectors.toList()); 我知道,无论如何这应该是相当有效的,但我想知道,是否有一种更简单的方法可以不使用中间流将可选项转换为列表?好的,我将它作为一个答案

我想将一个
可选的
收集到一个
列表中
,这样我就得到了一个包含单个元素的列表(如果可选的存在),或者一个空列表(如果没有)

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

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

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

好的,我将它作为一个答案发布

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


容易吗?也许不是。它没有中间流吗?是的。

好的,我就把它作为答案贴出来

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


容易吗?也许不是。它没有中间流吗?是的。

我认为最惯用的方法是使用
可选。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.map

var maybe = Optional.of("Maybe");
var list = maybe.map(List::of).orElse(Collections.emptyList());
或者,如果您不想创建一个可能最终未被使用的空列表:

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

不,没有比这更简单的方法了
List.of(可能是.get())
。当然,这是假设在可选项中实际上存在一个值。否则:
var list=maybe.isPresent()?List.of(maybe.get()):List.of()
。更容易的?也许不是。没有中间流?Yes.will
List strings=Optional.ofNullable(“Maybe”).map(ImmutableList::of).orelsGet(Collections::emptyList)足够好吗?我建议
列出maybeList=maybe.map(Collections::singletonList).orElse(Collections.emptyList())作为最惯用的方式…我同意@mcepender解决方案,它比使用流要好!不,没有比这更简单的方法了
List.of(可能是.get())
。当然,这是假设在可选项中实际上存在一个值。否则:
var list=maybe.isPresent()?List.of(maybe.get()):List.of()
。更容易的?也许不是。没有中间流?Yes.will
List strings=Optional.ofNullable(“Maybe”).map(ImmutableList::of).orelsGet(Collections::emptyList)足够好吗?我建议
列出maybeList=maybe.map(Collections::singletonList).orElse(Collections.emptyList())作为最惯用的方式…我同意@mcepender解决方案,它比使用流要好!