Назад к вопросам
Middle
69
questionbank
Когда начинается выполнение стрима в Java?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Выполнение стрима начинается при вызове терминальной операции.
Терминальные операции:
forEach/forEachOrderedtoArrayreducecollectcountanyMatch/allMatch/noneMatchfindFirst/findAnymin/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