Sobes.tech
Back to questions
Junior — Middle
84

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

Answer from AI

sobes.tech AI

В Stream API терминальные и нетерминальные операции отличаются по своему назначению и поведению:

  • Нетерминальные операции (intermediate) — это операции, которые возвращают новый стрим и позволяют строить цепочку преобразований. Они ленивы, то есть не выполняются сразу, а только при вызове терминальной операции. Примеры: filter(), map(), sorted(), distinct().

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

Пример:

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

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