[英]What would be a good use-case scenario for the Spliterator in Java 8?
通常,应用程序开发人员不会直接使用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
。 Collection
和Collections
API在Java 8中非常丰富,在大多数情况下,您最好使用vanilla Collection
子类而不是构建自己的Stream
接口。
您可能希望使用Spliterator
可能是使用链接数据结构的图形库,标准Spliterator
/ stream()
未定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.