Sobes.tech
Назад к вопросам
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); // терминальный