Java Collection.spliterator()

获取包含当前集合元素的的可分割迭代器(Spliterator) .

初见版本

1.8

定义

default Spliterator<E> spliterator()

参数

参数类型参数名称参数描述
类型参数E集合元素的类型

返回值

返回包含当前集合元素的的可分割迭代器(Spliterator) .

说明

本方法由接口 Iterable<E> 规定实现.

实现应该记录可分割迭代器报告的特征值. 如果可分割迭代器报告了 Spliterator.SIZED 且此集合不包含元素, 则不需要报告此类特征值.

默认实现应该被可以返回更有效的可分割迭代器的子类覆盖. 为了保留 stream()parallelStream() 方法的预期惰性行为, 可分割迭代器应该具有 IMMUTABLECONCURRENT 的特性或者是延后绑定. 如果这些都无法落实, 那么重写类应描述可分割迭代器的绑定和结构干扰的文档化策略, 并应覆盖 stream()parallelStream() 方法以使用可分割迭代器的提供者创建流,如下所示:

Stream<E> s = StreamSupport.stream(() -> spliterator(), spliteratorCharacteristics)

这些要求确保了 stream()parallelStream() 方法生成的流在启动终端流操作时可以反映集合的内容

实施要求:

默认实现从集合的迭代器创建一个延期绑定的可分割迭代器. 可分割迭代器继承了集合迭代器的快速失败的属性.

创建的可分割迭代器要报告 Spliterator.SIZED.

注意事项

实现注意:

创建的 Spliterator 要额外报告 Spliterator.SUBSIZED .

如果可分割迭代器不包含任何元素, 那么报告除 SIZEDSUBSIZED 之外的其他特征值都不会帮助客户端控制、专门化或简化计算. 然而它实实在在地允许共享使用针对集合的不可变的空的可分割迭代器实例, 并使客户端能够确定此类可分割迭代器是否不包含任何元素.

示例

获取集合的可分割迭代器的示例

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