В каких случаях потоковые операции должны быть с состоянием?
вЯваодок дляstream
пакетв конце разделаParallelism
, Я читаю:
Большинство потоковых операций принимают параметры, которые описывают пользовательское поведение, которое часто является лямбда-выражением. Чтобы сохранить правильное поведение, эти поведенческие параметры должны быть не мешающими,и в большинстве случаев должны быть без гражданства.
Мне трудно это понятьв большинстве случаевMsgstr "В каких случаях допустимо / желательно иметь потоковую операцию с состоянием?
Я имею в виду, я знаю, что это возможно, особенно при использовании последовательных потоков, но тот же самый Javadoc ясно заявляет:
За исключением операций, определенных как явно недетерминированные, такие какfindAny()
то, будет ли поток выполняться последовательно или параллельно, не должно изменять результат вычисления.
А также:
Также обратите внимание, что попытка получить доступ к изменяемому состоянию из поведенческих параметров представляет вам плохой выбор в отношении безопасности и производительности; [...] Лучший подход состоит в том, чтобы избежать поведенческих поведенческих параметров для полной потоковой передачи операций; обычно существует способ реструктуризации потокового конвейера, чтобы избежать отслеживания состояния.
Итак, мой вопрос: при каких обстоятельствах рекомендуется использовать потоковую операцию с состоянием (а не для методов, работающих с побочным эффектом, таких какforEach
)?
Смежный вопрос может быть таким: почему существуют операции, работающие с побочным эффектом, напримерforEach
? Я всегда заканчиваю тем, что делаю старый добрыйfor
цикл, чтобы избежать побочных эффектов в моем лямбда-выражении.