В чем разница между промежуточными и терминальными операторами

«В чем разница между промежуточными и терминальными операторами» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Промежуточные (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()          // терминальная