我有一个可选的整数列表。我希望看看列表是否实际存在,然后将其转换为流。一种方法是
Optional<List<Integer>> listOfNumbers = ...
if (listOfNumbers.isPresent()) {
listOfNumbers.get().stream();
}
但是,如果有条件,我不希望这样。我搜索并看到ifPresent()
执行相同的操作,但当我执行listOfNumbers.ifPresent(this::get))
时,我收到以下错误:
非静态变量,不能从静态上下文引用
你能帮助我以有效的方式做到这一点吗?这对我来说还是新的,所以如果我的理解有任何不正确的地方,请告诉我。
答案 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);