20

SpliteratorJava 8中的类的一个好的用例场景是什么?

4

3 回答 3

6

用例示例:“将迭代器转换为流”

public static <T> Stream<T> iteratorToFiniteStream(final Iterator<T> iterator) {
   final Iterable<T> iterable = () -> iterator;
  return StreamSupport.stream(iterable.spliterator(), false);
}
于 2015-04-13T12:43:09.440 回答
6

通常,应用程序开发人员不会Spliterator直接使用 API。但是,如果您提供 API,并实现自己的类集合类,则可以实现Spliterator以使您的集合适应StreamAPI。这支持函数式方法、并行处理和其他特性。

例如,我编写了一个实用程序来枚举网络中的 IP 地址,由 CIDR 表示法指定。这不是一个真正的集合。也就是说,它不会一次携带内存中所有地址的列表,只有网络号和网络掩码。但是通过暴露 a Spliterator,它可以很容易地适应 a Stream。(每个Spliterator只跟踪其网络份额中的当前 IP 地址和最大地址。)

核心 Java 运行时的另一个例子是DirectoryStream遍历文件系统。

于 2015-02-09T19:20:59.993 回答
3

Spliterator是 timelessIterator类的扩展,它允许拆分对象流以进行迭代(Stream通过在迭代之前收集操作来工作)。

我想不出任何时候普通开发人员必须使用Spliterator. Java 8 中的CollectionCollectionsAPI 非常丰富,在大多数情况下,最好使用 vanillaCollection子类而不是构建自己的Stream接口。

您可能想要使用的一个示例可能是使用未定义标准/的链接数据结构的图形Spliterator库。Spliteratorstream()

于 2015-02-09T19:10:37.860 回答