Назад к вопросам
Junior — Middle
67
Как отличить операторы, выполняющие промежуточные действия, от тех, которые завершают поток выполнения в потоковых данных?
Ответ от нейросети
sobes.tech AI
В потоковых данных (Streams) операторы делятся на промежуточные и терминальные:
-
Промежуточные операторы (intermediate) возвращают новый поток и позволяют строить цепочку операций. Они ленивы — не выполняются до тех пор, пока не вызван терминальный оператор. Примеры:
map(),filter(),sorted(). -
Терминальные операторы (terminal) завершают поток, выполняют вычисления и возвращают результат или побочный эффект. После их вызова поток считается закрытым. Примеры:
collect(),forEach(),reduce(),count().
Чтобы отличить:
- Если оператор возвращает Stream — это промежуточный.
- Если возвращает не Stream (например, коллекцию, число, void) — терминальный.
Пример:
Stream.of(1, 2, 3)
.filter(n -> n > 1) // промежуточный
.map(n -> n * 2) // промежуточный
.forEach(System.out::println); // терминальный