Ответ
Промежуточные (intermediate) и терминальные (terminal) операторы в Stream API различаются по своему назначению и поведению:
Промежуточные:
- Ленивые (выполняются только при вызове терминальной операции)
- Возвращают новый Stream
- Можно объединять в цепочки
- Примеры:
map(),filter(),sorted()
Терминальные:
- Запускают выполнение всего pipeline
- Возвращают результат или void
- Закрывают Stream (повторно использовать нельзя)
- Примеры:
collect(),forEach(),reduce()
val result = listOf(1, 2, 3).stream()
.filter { it > 1 } // промежуточная
.map { it * 2 } // промежуточная
.toList() // терминальная