java – 在消费者函数抛出异常后,Spliterator是否应该可重用?

前端之家收集整理的这篇文章主要介绍了java – 在消费者函数抛出异常后,Spliterator是否应该可重用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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都以这种方式工作.

猜你在找的Java相关文章