Назад к вопросам
Junior — Middle
64
Когда именно вызываются методы промежуточной обработки в цепочке Stream в Java?
Компании, где спрашивали
айтеко
Ответ от нейросети
sobes.tech AI
Методы промежуточной обработки (intermediate operations) в Java Stream являются ленивыми — они не выполняются сразу при вызове. Вместо этого они настраивают цепочку операций, которая будет выполнена только при вызове терминальной операции (terminal operation), например, collect(), forEach(), reduce().
То есть, промежуточные методы вызываются и создают новый Stream, но фактическая обработка элементов происходит только при запуске терминальной операции. Это позволяет оптимизировать обработку, например, выполнять операции по фильтрации и преобразованию элементов только один раз, проходя по данным.
Пример:
List<String> list = Arrays.asList("a", "b", "c");
list.stream()
.filter(s -> {
System.out.println("filter: " + s);
return s.startsWith("a");
})
.map(s -> {
System.out.println("map: " + s);
return s.toUpperCase();
}); // здесь ничего не выведется, так как нет терминальной операции
list.stream()
.filter(s -> {
System.out.println("filter: " + s);
return s.startsWith("a");
})
.map(s -> {
System.out.println("map: " + s);
return s.toUpperCase();
})
.forEach(System.out::println); // терминальная операция запускает обработку
В этом примере вывод появится только при вызове forEach, а не при настройке цепочки.