Назад к вопросам
Middle
69
questionbank

Когда начинается выполнение стрима в Java?

Sobes Copilot

Получайте ответы в реальном времени

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

sobes.tech AI

Выполнение стрима начинается при вызове терминальной операции.

Терминальные операции:

  • forEach / forEachOrdered
  • toArray
  • reduce
  • collect
  • count
  • anyMatch / allMatch / noneMatch
  • findFirst / findAny
  • min / max

Промежуточные операции, такие как filter, map, sorted, являются ленивыми и лишь описывают конвейер обработки данных, не выполняя фактически никаких действий до вызова терминальной операции.

Пример:

// Источник данных: список чисел
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

// Промежуточные операции - определяют конвейер, но не выполняются
Stream<Integer> processedStream = numbers.stream()
    .filter(n -> {
        // Этот код не выполнится до вызова терминальной операции
        System.out.println("Filtering: " + n);
        return n % 2 == 0;
    })
    .map(n -> {
        // Этот код не выполнится до вызова терминальной операции
        System.out.println("Mapping: " + n);
        return n * 2;
    });

// Терминальная операция - запускает выполнение конвейера
List<Integer> result = processedStream.collect(Collectors.toList());

// Вывод будет:
// Filtering: 1
// Filtering: 2
// Mapping: 2
// Filtering: 3
// Filtering: 4
// Mapping: 4
// Filtering: 5