Как отличаются терминальные и нетерминальные операции в 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(), которая запускает обработку и возвращает итоговый список.