繁体   English   中英

Java 8中Spliterator的一个很好的用例场景是什么?

[英]What would be a good use-case scenario for the Spliterator in Java 8?

Java 8中Spliterator类的用例场景是什么?

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

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

核心Java运行时的另一个示例是用于遍历文件系统的DirectoryStream

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

public static <T> Stream<T> iteratorToFiniteStream(final Iterator<T> iterator) {
   final Iterable<T> iterable = () -> iterator;
  return StreamSupport.stream(iterable.spliterator(), false);
}

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

我无法想到普通开发人员何时必须使用Spliterator CollectionCollections API在Java 8中非常丰富,在大多数情况下,您最好使用vanilla Collection子类而不是构建自己的Stream接口。

您可能希望使用Spliterator可能是使用链接数据结构的图形库,标准Spliterator / stream()未定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM