Терминальные и промежуточные операции в стримах Java отличаются по характеру выполнения и результатам.
Промежуточные операции возвращают новый стрим, который получается в результате преобразования исходного. 4 Они не выполняются сразу, а только когда вызывается терминальная операция. 4 Промежуточные операции не меняют данные, а только задают логику их изменения. 5 Примеры: filter (фильтрует элементы по условию) и map (преобразует элементы с помощью заданной функции). 4
Терминальные операции завершают обработку стрима и возвращают результат или побочный эффект. 4 После вызова терминальной операции поток больше нельзя использовать повторно — это приведёт к ошибке. 2 Терминальные операции запускают всю цепь промежуточных операций, закрывают поток и возвращают модифицированные данные. 5 Примеры: forEach (выполняет заданное действие для каждого элемента), collect (собирает элементы в заданный контейнер). 4
Таким образом, промежуточные операции создают логику преобразования данных, а терминальные — обеспечивают окончательную обработку и вывод результата.