Я считаю, что вы не должны идти дальше после неудачи.
Сплитератор прекращает свою работу и больше не перебирает элементы. Даже если есть оставшиеся элементы.
Исключение в forEachRemaining
для определенного элемента означает, что вычисление для всей группы закончено.
Обход и расщепление выхлопных элементов; каждый Spliterator полезен только для одного массового вычисления.
Пример того, как Spliterators.ArraySpliterator
справляется с этим.
Spliterator<String> spliterator = Arrays.asList("a", "b", "c").spliterator();
System.out.println(spliterator.estimateSize());
try {
spliterator.forEachRemaining(s -> {
if (s.equals("b")) {
throw new IllegalArgumentException();
}
System.out.println(s);
});
} catch (IllegalArgumentException e) {}
System.out.println(spliterator.estimateSize());
spliterator.forEachRemaining(System.out::println);
3
a
0
AFAIK, большинство Spliterator
s, основанных на коллекции / массиве, работают таким образом.