Java Collection.spliterator() 方法及代码示例
获取包含当前集合元素的的可分割迭代器(Spliterator
) .
初见版本
1.8定义
default Spliterator<E> spliterator()
参数
参数类型 | 参数名称 | 参数描述 |
---|---|---|
类型参数 | E | 集合元素的类型 |
返回值
返回包含当前集合元素的的可分割迭代器(Spliterator
) .
说明
本方法由接口 Iterable<E>
规定实现.
实现应该记录可分割迭代器报告的特征值. 如果可分割迭代器报告了 Spliterator.SIZED
且此集合不包含元素, 则不需要报告此类特征值.
默认实现应该被可以返回更有效的可分割迭代器的子类覆盖. 为了保留 stream()
和 parallelStream()
方法的预期惰性行为, 可分割迭代器应该具有 IMMUTABLE
或 CONCURRENT
的特性或者是延后绑定. 如果这些都无法落实, 那么重写类应描述可分割迭代器的绑定和结构干扰的文档化策略, 并应覆盖 stream()
和 parallelStream()
方法以使用可分割迭代器的提供者创建流,如下所示:
Stream<E> s = StreamSupport.stream(() -> spliterator(), spliteratorCharacteristics)
这些要求确保了 stream()
和 parallelStream()
方法生成的流在启动终端流操作时可以反映集合的内容
实施要求:
默认实现从集合的迭代器创建一个延期绑定的可分割迭代器. 可分割迭代器继承了集合迭代器的快速失败的属性.
创建的可分割迭代器要报告 Spliterator.SIZED
.
注意事项
实现注意:
创建的 Spliterator
要额外报告 Spliterator.SUBSIZED
.
如果可分割迭代器不包含任何元素, 那么报告除 SIZED
和 SUBSIZED
之外的其他特征值都不会帮助客户端控制、专门化或简化计算. 然而它实实在在地允许共享使用针对集合的不可变的空的可分割迭代器实例, 并使客户端能够确定此类可分割迭代器是否不包含任何元素.
示例
获取集合的可分割迭代器的示例
package com.yi21.collection; import java.util.Collection; import java.util.List; import java.util.Spliterator; public class Yi21CollectionSpliterator { public static void main(String[] args) { List<String> list = List.of("Hello", "Wolrld", "21yi"); System.out.println("对象 list 是否是一个集合? " + (list instanceof Collection)); Spliterator<String> iterator = list.spliterator(); System.out.println("拆分其中可用元素估计还有: " + iterator.estimateSize()); iterator.forEachRemaining(System.out::println); } }
执行结果为 :
对象 list 是否是一个集合? true 拆分其中可用元素估计还有: 3 Hello Wolrld 21yi