Sobes.tech
Back to questions
Junior — Middle
81

Чем отличаются промежуточные функции от терминальных в Stream API и как они влияют на выполнение потоков?

Answer from AI

sobes.tech AI

В Stream API (например, в Java) операции делятся на промежуточные (intermediate) и терминальные (terminal).

Промежуточные функции:

  • Возвращают новый поток (Stream), позволяя строить цепочку операций.
  • Ленивы — не выполняются сразу, а только при вызове терминальной операции.
  • Примеры: filter(), map(), sorted().

Терминальные функции:

  • Завершают цепочку операций и запускают обработку данных.
  • Возвращают результат (например, коллекцию, число, void).
  • Примеры: collect(), forEach(), reduce().

Влияние на выполнение:

  • Промежуточные операции накапливаются и не выполняются до тех пор, пока не вызовется терминальная операция.
  • Это позволяет оптимизировать выполнение, например, выполнять операции поэлементно и прерывать обработку при необходимости.

Пример:

List<String> result = list.stream()
    .filter(s -> s.startsWith("A"))  // промежуточная
    .map(String::toUpperCase)          // промежуточная
    .collect(Collectors.toList());    // терминальная

Здесь фильтрация и преобразование не выполняются сразу, а только при вызове collect(). Это повышает эффективность и позволяет строить гибкие конвейеры обработки данных.