Может ли `stream.allmatch ()` вызовать предикат несколько раз для одного и того же элемента?JAVA

Программисты JAVA общаются здесь
Anonymous
Может ли `stream.allmatch ()` вызовать предикат несколько раз для одного и того же элемента?

Сообщение Anonymous »

Я пытаюсь реализовать короткую закрученную обработку для внешнего ввода java.util.stream (think stream.foreach () , но с коротким замыканием). Меня не волнует порядок элементов, но если обработка не является короткой закрученной, их личность и счет важны. У меня уже есть решение, основанное на потоке. Spliterator () и некоторое время цикл, однако он не параллелизирован и его трудно читать. Полученный код может выглядеть как: < /p>

Код: Выделить всё

 void process(Stream input) {
input.allMatch(element -> {
if (isCancelled) {
return false;
}
send(element); // Should receive all elements in any order exactly once unless cancelled
return true;
});
}
AllMatch () когда -либо применяет аргумент предиката к одному и тому же элементу несколько раз?

Код: Выделить всё

    @Test
public void anyMatch() {
AtomicLong count = new AtomicLong(0);
IntStream.range(0, Integer.MAX_VALUE).parallel().mapToObj(ignored -> new Object()) .allMatch(i -> {
count.incrementAndGet(); // verify that no objects are processed more than once
return true;
});
Assert.assertEquals(count.get(), Integer.MAX_VALUE);
}
< /code>
imo, учитывая природу базового Spliterator.trysplit () < /code> Это надежный подход, но я хотел бы как -то получить подтверждение и прогноз.PushSpliterator.parallel()


Подробнее здесь: https://stackoverflow.com/questions/797 ... me-element

Вернуться в «JAVA»