Spliterator
Java 8中的类的一个好的用例场景是什么?
3 回答
用例示例:“将迭代器转换为流”
public static <T> Stream<T> iteratorToFiniteStream(final Iterator<T> iterator) {
final Iterable<T> iterable = () -> iterator;
return StreamSupport.stream(iterable.spliterator(), false);
}
通常,应用程序开发人员不会Spliterator
直接使用 API。但是,如果您提供 API,并实现自己的类集合类,则可以实现Spliterator
以使您的集合适应Stream
API。这支持函数式方法、并行处理和其他特性。
例如,我编写了一个实用程序来枚举网络中的 IP 地址,由 CIDR 表示法指定。这不是一个真正的集合。也就是说,它不会一次携带内存中所有地址的列表,只有网络号和网络掩码。但是通过暴露 a Spliterator
,它可以很容易地适应 a Stream
。(每个Spliterator
只跟踪其网络份额中的当前 IP 地址和最大地址。)
核心 Java 运行时的另一个例子是DirectoryStream
遍历文件系统。
Spliterator
是 timelessIterator
类的扩展,它允许拆分对象流以进行迭代(Stream
通过在迭代之前收集操作来工作)。
我想不出任何时候普通开发人员必须使用Spliterator
. Java 8 中的Collection
和Collections
API 非常丰富,在大多数情况下,最好使用 vanillaCollection
子类而不是构建自己的Stream
接口。
您可能想要使用的一个示例可能是使用未定义标准/的链接数据结构的图形Spliterator
库。Spliterator
stream()