В каких случаях потоковые операции должны быть с состоянием?

вЯваодок дляstream пакетв конце разделаParallelism, Я читаю:

Большинство потоковых операций принимают параметры, которые описывают пользовательское поведение, которое часто является лямбда-выражением. Чтобы сохранить правильное поведение, эти поведенческие параметры должны быть не мешающими,и в большинстве случаев должны быть без гражданства.

Мне трудно это понятьв большинстве случаевMsgstr "В каких случаях допустимо / желательно иметь потоковую операцию с состоянием?

Я имею в виду, я знаю, что это возможно, особенно при использовании последовательных потоков, но тот же самый Javadoc ясно заявляет:

За исключением операций, определенных как явно недетерминированные, такие какfindAny()то, будет ли поток выполняться последовательно или параллельно, не должно изменять результат вычисления.

А также:

Также обратите внимание, что попытка получить доступ к изменяемому состоянию из поведенческих параметров представляет вам плохой выбор в отношении безопасности и производительности; [...] Лучший подход состоит в том, чтобы избежать поведенческих поведенческих параметров для полной потоковой передачи операций; обычно существует способ реструктуризации потокового конвейера, чтобы избежать отслеживания состояния.

Итак, мой вопрос: при каких обстоятельствах рекомендуется использовать потоковую операцию с состоянием (а не для методов, работающих с побочным эффектом, таких какforEach)?

Смежный вопрос может быть таким: почему существуют операции, работающие с побочным эффектом, напримерforEach? Я всегда заканчиваю тем, что делаю старый добрыйfor цикл, чтобы избежать побочных эффектов в моем лямбда-выражении.

Ответы на вопрос(4)

Ваш ответ на вопрос