Промежуточные операции не вычисляются, пока они не будут объединены с финальной операцией. В отличие от этого, финальные операции вычисляются независимо и запускают выполнение всего пайплайна потока.
Промежуточные операции возвращают другой объект Stream, что позволяет дальше его цеплять. Финальные операции возвращают результат, который не является Stream — например, коллекцию, значение или void — и завершают пайплайн потока.
Промежуточные операции следуют ленивым вычислениям, то есть откладывают обработку до момента необходимости. Финальные операции используют жадные вычисления, сразу выполняя все операции в цепочке потока при вызове.
Несколько промежуточных операций можно последовательно объединять в цепочку:
stream.filter(...).map(...).sorted()
Финальные операции нельзя цеплять, так как они завершают поток и возвращают итоговый результат.
Один пайплайн потока может содержать несколько промежуточных операций, но только одну финальную операцию для завершения обработки.
Промежуточные операции:
filter()map()sorted()distinct()Финальные операции:
collect()forEach()reduce()count()findFirst()Понимание этого различия критично для написания эффективных потоков. Промежуточные операции настраивают преобразования, не потребляя ресурсов, а финальные операции запускают выполнение и возвращают итоговый результат.
Промежуточные операции в Java 8 Streams используют ленивые вычисления и не выполняются до тех пор, пока не будет вызвана терминальная операция для запуска pipeline.
Новый — ещё не проверен сообществом
Вы