Sobes.tech
Назад к вопросам
Senior
7

Что такое промежуточные и терминальные операторы в Stream? Приведите примеры.

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

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

Промежуточные операторы возвращают новый Stream и позволяют строить цепочку операций. Они ленивы, то есть не выполняются до вызова терминального оператора.

Примеры промежуточных операторов:

  • filter(Predicate) — фильтрация элементов
  • map(Function) — преобразование элементов
  • sorted() — сортировка
  • distinct() — удаление дубликатов

Терминальные операторы завершают цепочку и возвращают результат (не Stream). Они запускают выполнение всех промежуточных операций.

Примеры терминальных операторов:

  • collect(Collector) — собирает элементы в коллекцию
  • forEach(Consumer) — выполняет действие для каждого элемента
  • reduce(BinaryOperator) — свертка элементов
  • count() — подсчет элементов

Пример:

List<String> names = List.of("Anna", "Bob", "Alice", "Brian");
long count = names.stream()
    .filter(name -> name.startsWith("A")) // промежуточный оператор
    .count(); // терминальный оператор
System.out.println(count); // Выведет 2