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);