spliterator()

spliterator()

文档说明

  • 创建一个分割迭代器(方法定义在 Iterable 接口)
  • 实现类需要记录 spliterator 报告的 characteristic 值
    • 但当 spliterator 报告了 size 或当前集合容器中无元素时,这个 characteristic值则无需报告
  • 默认的实现需要被子类重写,返回一个更加高效的 spliterator
    • 为了保留期望的 stream() 和 parallelStream() 的延迟行为,分割迭代器需要具有 IMMUTABLE 或 CONCURRENT 特性,或者设置为延迟绑定的(late-binding)
    • 如果上述要求都无法实现,则重写的类需要去描写该分割迭代器的文档化的绑定策略,以及可能出现的修改的行为,并且还需要重写 stream() 和 parallelStream() 方法,通过 spliterator 的 Supplier 去创建流
    • 这些要求确保了由 stream() 或 parallelStream() 生成的流在终止操作执行时能够反映出集合的内容
    • 默认的实现是从集合的 Iterator 中创建了一个延迟绑定的 spliterator,这个 spliterator 继承了迭代器的 fail-fast(快速失败)属性
    • 所创建出来的 spliterator 会包含 SIZED 特性值
    • 同时,此 spliterator 还具有 SUBSIZED 特性值
    • 若一个 spliterator 中没有元素,则特性值报告不会帮助客户端对 SIZED 与 SUBSIZED 以外的特性值进行控制、或进行专门的简化计算
    • 这样可以确保了可以对空集合共享使用一个不可变的空的 spliterator 实例,并且可以确保客户能够判定该 spliterator 是否不包含任何元素

源码

Collection 中的 spliterator(),

@Override
default Spliterator<E> spliterator() {
    return Spliterators.spliterator(this, 0);
}

猜你喜欢

转载自www.cnblogs.com/flying-snake/p/11520854.html