迭代整数ifPresent的可选列表

aay*_*v20 11 lambda list optional java-8 java-stream

我有一个可选的整数列表.我希望看看列表是否实际存在,然后将其转换为流.一种方法是这样做

Optional<List<Integer>> listOfNumbers = ...
if (listOfNumbers.isPresent()) {
    listOfNumbers.get().stream();
}
Run Code Online (Sandbox Code Playgroud)

但是,如果有条件,我不希望这样.我搜索并看到它ifPresent()做同样的事情,但当我这样做时listOfNumbers.ifPresent(this::get)),我收到以下错误:

非静态变量,不能从静态上下文引用

能否以有效的方式帮助我做到这一点?这对我来说还是新的,所以如果我的理解有任何不正确的地方,请告诉我.

Zhe*_*lov 19

正如评论中所指出的,获得a的最简洁方法Stream是使用Optional.orElse方法Collections.emptyList:

Stream<Integer> stream = listOfNumbers.orElse(Collections.emptyList()).stream();
Run Code Online (Sandbox Code Playgroud)

另一种可能的解决方案Optional.map:

Stream<Integer> stream = listOfNumbers.map(List::stream).orElse(Stream.empty());
Run Code Online (Sandbox Code Playgroud)

  • 我最喜欢第二个版本.我认为更重要的是因为我们真的不需要一个空列表,只是一个空流, (5认同)