[英]What's the purpose of the IntStream.empty() method?
在关于新JDK8流API的教程中,我遇到了IntStream
, DoubleStream
和LongStream
的静态.empty()
方法。
那么什么时候使用这种方法有意义呢?
一个很好的例子是从OptionalInt
创建IntStream
:如果存在可选项,则需要单例流;如果不存在可选项,则需要空流:
public static IntStream ofOptional(OptionalInt optional) {
return optional.isPresent() ? IntStream.of(optional.get()) : IntStream.empty();
}
实际上这种方法已经添加到JDK9中。
(您曾询问过IntStream
, LongStream
和DoubleStream
上的empty()
方法,但此方法也在Stream
接口上用于引用类型。)
一般的答案是, empty()
可用作传递给获取流的API的流源 - 无论是作为参数还是作为返回值 - 以及没有要传递的值。 在大多数情况下,您不能传递null
,您必须传递某种类型的流。 获取没有值的流的方法是使用Stream.empty()
和朋友。
这是一个重复偶数并丢弃奇数并将它们收集到列表中的示例:
List<Integer> list =
IntStream.range(0, 10)
.flatMap(i -> (i & 1) == 0 ? IntStream.of(i, i) : IntStream.empty())
.boxed()
.collect(Collectors.toList());
结果是
[0, 0, 2, 2, 4, 4, 6, 6, 8, 8]
正如人们所料。 重点是flatMap()
传递一个值,并期望接收任意数量的值,包括零值。 这样做的方法是让flat-mapping操作返回一个值流。 要使其返回零值,它将返回一个空流。
您可以使用初始化您提到的任何类型的空Stream。 我将其视为构建新对象的另一种方式。 就那么简单。
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#empty--
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.