Sobes.tech
Назад к вопросам
Junior — Middle
55

Можете привести пример операции, которая завершает обработку данных в потоке или коллекции?

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

sobes.tech AI

Что хотят услышать интервьюеры:

Нужно показать, что понимается разница между промежуточными и терминальными операциями в Stream API. Терминальная операция запускает обработку и завершает работу со stream. После неё поток нельзя использовать повторно.

Определение:

Терминальная операция — это операция в stream pipeline, которая потребляет элементы, выполняет вычисление и завершает обработку потока. В коллекциях аналогом можно считать операцию, которая проходит по элементам и возвращает итоговый результат, например сумму, количество или найденный элемент.

Пример использования:

Например, collect, count, forEach, reduce, findFirst — это терминальные операции в Stream API. Они либо возвращают результат, либо выполняют действие и завершают stream.

import java.util.List;

public class Demo {
    public static void main(String[] args) {
        List<Integer> numbers = List.of(1, 2, 3, 4, 5);

        long count = numbers.stream()
                .filter(n -> n > 2)
                .count();

        System.out.println(count); // 3
    }
}

Пояснение кода:

Код берет список чисел и создает stream. Затем filter(n -> n > 2) оставляет только элементы больше 2. После этого count() проходит по оставшимся элементам, считает их количество и завершает обработку stream. Итогом будет число 3.

Ключевые моменты:

  • Терминальная операция завершает pipeline и запускает выполнение всех промежуточных операций.
  • После терминальной операции stream нельзя использовать повторно.
  • Частые терминальные операции: count, collect, forEach, reduce, findFirst.
  • Промежуточные операции сами по себе не выполняются, пока не вызвана терминальная.
  • В коллекциях итог обработки обычно получается через обход элементов и вычисление результата.