Spliterator在其tryAdvance和forEachRemaining方法中采用任意Consumer函数.
如果消费者抛出异常,分裂者的状态应该是什么?如果传递给forEachRemaining的消费者在10个项目之后抛出一个异常(然后传播出来并被捕获),那么下一个对分裂器中的tryAdvance的调用是否会返回第11个项目,或者是否应该将分裂器视为死亡&那时无效?
javadocs在这一点上含糊不清;他们只是说任何例外情况都会传播出去,而没有提到分裂者在那之后的状态
最佳答案
我相信在失败之后你不应该走得更远.
分裂器停止其工作,不再迭代元素.即使有剩余的元素.
forEachRemaining中特定元素的异常意味着整个组的计算结束.
Traversal and splitting exhaust elements; each Spliterator is useful for only a single bulk computation.
Spliterators.ArraySpliterator如何处理此问题的示例.
Spliterator
3
a
0
AFAIK,大多数基于集合/数组的Spliterators都以这种方式工作.