Что возвращают промежуточные операции в Java Stream API?

«Что возвращают промежуточные операции в Java Stream API?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Промежуточные операции (intermediate operations) возвращают новый объект Stream, позволяя строить цепочки вызовов (fluent interface). Они являются "ленивыми" (lazy) — вычисления происходят только при вызове терминальной операции.

Пример цепочки:

List<String> result = names.stream()        // Источник
    .filter(name -> name.startsWith("J"))  // Промежуточная операция -> Stream<String>
    .map(String::toUpperCase)              // Промежуточная операция -> Stream<String>
    .collect(Collectors.toList());         // Терминальная операция (запускает обработку)

Распространенные промежуточные операции:

  • Фильтрация и преобразование: filter(), map(), flatMap()
  • Управление порядком и уникальностью: distinct(), sorted(), limit(), skip()
  • Отладка: peek()

Важно: Поскольку возвращается Stream, промежуточные операции можно объединять в конвейер (pipeline), но без терминальной операции никакие данные обработаны не будут.