是否有任何合理的简便方法可以用Java实现,而无需自己实现整个Stream接口?
一个简单的
.limit()保证,它将终止。但这并不总是那么强大。
使用
Stream工厂方法后,创建海关流源而不重新实现流处理管道的最简单方法是
java.util.Spliterators.AbstractSpliterator<T>将其子类化并传递给
java.util.stream.StreamSupport.stream(Supplier<?extends Spliterator<T>>, int, boolean)
如果您打算使用并行流,请注意,
AbstractSpliterator只会产生次佳的拆分。如果您对源代码有更多控制权,则完全实现该
Spliterator接口会更好。
例如,以下代码片段将创建一个提供无限序列1,2,3 …的Stream。
在该特定示例中,您可以使用
IntStream.range()
但是流显然会在某个时刻结束,并且终端操作符(如(collect()或findAny()))需要对其进行处理。
findAny()只要有任何匹配的元素,像这样的短路操作实际上就可以在无限流上完成。
Java
9引入了Stream.iterate来为某些简单情况生成有限的流。



