java—将可选的转换为列表

gudnpqoy  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(248)

我想收集一个 Optional 变成一个 List ,这样我就得到了一个只有一个元素的列表(如果可选的存在),或者一个空列表(如果没有)。
我想到的唯一方法(在java 11中)是通过一个流:

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

我知道,这应该是相当有效的反正,但我想知道,如果有一个更简单的方法,转换成一个可选的列表不使用中间流?

blpfk2vs

blpfk2vs1#

好吧,我把它作为答案贴出来。 List.of(maybe.get()) . 当然,这是假设在可选值中实际上存在一个值。否则: var list = maybe.isPresent() ? List.of(maybe.get()) : List.of() .
比较容易吗?也许不是。它没有中间流吗?对。

cbjzeqam

cbjzeqam2#

我认为最惯用的方法是 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);

相关问题