对于Java8中的拆分器,什么是一个好的用例场景?
Java 8中类的一个好用例场景是什么?对于Java8中的拆分器,什么是一个好的用例场景?,java,data-structures,iterator,java-8,spliterator,Java,Data Structures,Iterator,Java 8,Spliterator,Java 8中类的一个好用例场景是什么?Spliterator是永恒的迭代器类的一个扩展,它允许拆分要迭代的对象流(流通过在迭代之前收集操作来工作) 我想不出任何时候普通的开发人员都必须使用Spliterator。Java 8中的和API极其丰富,在大多数情况下,最好使用普通的集合子类,而不是构建自己的流接口 您可能希望使用Spliterator的一个示例可能是使用链接数据结构的库,其中标准Spliterator/stream()未定义。通常,应用程序开发人员不会直接使用SpliteratorA
Spliterator
是永恒的迭代器
类的一个扩展,它允许拆分要迭代的对象流(流
通过在迭代之前收集操作来工作)
我想不出任何时候普通的开发人员都必须使用Spliterator
。Java 8中的和API极其丰富,在大多数情况下,最好使用普通的集合
子类,而不是构建自己的流
接口
您可能希望使用
Spliterator
的一个示例可能是使用链接数据结构的库,其中标准Spliterator
/stream()
未定义。通常,应用程序开发人员不会直接使用Spliterator
API。但是,如果您提供了一个API,并实现了自己的类集合,那么您可以实现Spliterator
,以使您的集合适应流
API。这支持功能方法、并行处理和其他特性
例如,我编写了一个实用程序来枚举网络中的IP地址,由CIDR表示法指定。这不是一个真正的收藏;也就是说,它不会同时携带内存中所有地址的列表,只有网络号和网络掩码。但是通过公开拆分器
,它可以很容易地适应流
。(每个Spliterator
只跟踪当前IP地址和其网络份额中的最大地址。)
核心Java运行时的另一个示例是用例示例:“将迭代器转换为流”
公共静态流迭代器of initestream(最终迭代器迭代器){
最终Iterable Iterable=()->迭代器;
返回StreamSupport.stream(iterable.spliterator(),false);
}
Spliterator,而不是SplitIterator.:-)我发现了这些问题,它们似乎与拆分器相关。流是由拆分器构建的。因此,每当您希望从集合创建流时,都需要提供拆分器Spliterator
不扩展Iterator
@erickson我不是指继承。它延续了迭代器的概念。
public static <T> Stream<T> iteratorToFiniteStream(final Iterator<T> iterator) {
final Iterable<T> iterable = () -> iterator;
return StreamSupport.stream(iterable.spliterator(), false);
}