Параллельный Spliterator

Какой нужен флаг в пайплайне для сплитератора, чтобы интерфейс java.util.stream.Sink отработал метод cancellationRequested()? Т.е. у нас есть такое вот условие в коде AbstractPipeline

Какие нужны флаги, чтобы добраться до метода copyIntoWithCancel() в котором и будет отработка cancellationRequested()? Флаги Spliterator.DISTINCT | Spliterator.SORTED | Spliterator.ORDERED | Spliterator.SIZED не работают и он просто не вызывает метод cancellationRequested().


Ответы (1 шт):

Автор решения: RSalnikov

Если кому-то нужно, то реализацию метода cancellationRequested() переопределять нельзя. Он вызывается автоматически в двух условиях:

  1. Использование StreamSupport.doubleStream, StreamSupport.intStream, StreamSupport.longStream.
  2. Для того, чтобы он отрабатывал в StreamSupport.stream, обязательно нужно вызывать методы стрима find, gather, match, slice, while
→ Ссылка