List 迭代可选的整数列表(如果存在)

List 迭代可选的整数列表(如果存在),list,lambda,java-8,java-stream,optional,List,Lambda,Java 8,Java Stream,Optional,我有一个可选的整数列表。我希望查看列表是否确实存在,然后将其转换为流。一种方法是 Optional<List<Integer>> listOfNumbers = ... if (listOfNumbers.isPresent()) { listOfNumbers.get().stream(); } 可选列表编号=。。。 if(listofNumber.isPresent()){ listofNumber.get().stream(); } 但是,我不希望有那样

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

Optional<List<Integer>> listOfNumbers = ...
if (listOfNumbers.isPresent()) {
    listOfNumbers.get().stream();
}
可选列表编号=。。。
if(listofNumber.isPresent()){
listofNumber.get().stream();
}
但是,我不希望有那样的条件。我搜索并看到
ifPresent()
做了同样的事情,但是当我做
listofNumber.ifPresent(this::get))
时,我得到了以下错误:

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


你能帮我高效地完成这件事吗?这对我来说还是新鲜事,所以如果我的理解有任何不正确的地方,请告诉我

正如注释中所指出的,获取
流的最干净方法是将
可选.orElse
方法与
集合一起使用。emptyList

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

更新Java 9:

由于jdk9,
Optional
有一个新方法
stream()
,它返回一个元素的流或一个空流

因此,从
可选
成为

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

listofNumber.orElse(Collections.emptyList()).stream()…
?我最喜欢第二个版本。我认为这更切题,因为我们真的不需要一个空列表,只需要一个空流,
Stream<Integer> streamOfNumbers = listOfNumbers.stream().flatMap(List::stream);