迭代整数ifPresent的可选列表

时间:2017-04-12 23:33:08

标签: list lambda java-8 java-stream optional

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

Optional<List<Integer>> listOfNumbers = ...
if (listOfNumbers.isPresent()) {
    listOfNumbers.get().stream();
}

但是,如果有条件,我不希望这样。我搜索并看到ifPresent()执行相同的操作,但当我执行listOfNumbers.ifPresent(this::get))时,我收到以下错误:

  

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

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

2 个答案:

答案 0 :(得分:17)

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

Stream<Integer> stream = listOfNumbers.orElse(Collections.emptyList()).stream();

Optional.map的其他可能解决方案:

Stream<Integer> stream = listOfNumbers.map(List::stream).orElse(Stream.empty());

答案 1 :(得分:4)

更新Java 9:

由于jdk9的存在,Optional有一个新方法stream(),该方法将返回一个元素的流或空的流。

因此,从Optional<List<Integer>>Stream<Integer>变成

Stream<Integer> streamOfNumbers = listOfNumbers.stream().flatMap(List::stream);