Sobes.tech
Назад к вопросам
Junior — Middle
66

Могли бы вы объяснить принцип ленивой оценки (lazy evaluation) в потоках данных (Streams)?

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

sobes.tech AI

Ленивая оценка (lazy evaluation) в потоках данных (Streams) означает, что операции над элементами не выполняются сразу, а откладываются до тех пор, пока результат действительно не понадобится.

В Java Stream API промежуточные операции (например, filter, map) являются ленивыми — они не запускают обработку данных, а лишь формируют цепочку операций. Только терминальная операция (например, collect, forEach) инициирует выполнение всей цепочки.

Это позволяет оптимизировать производительность, так как данные обрабатываются по мере необходимости и только один раз.

Пример:

List<String> names = Arrays.asList("Anna", "Bob", "Charlie");

List<String> filtered = names.stream()
    .filter(name -> {
        System.out.println("Filtering: " + name);
        return name.startsWith("A");
    })
    .map(name -> {
        System.out.println("Mapping: " + name);
        return name.toUpperCase();
    })
    .collect(Collectors.toList());

В этом примере сообщения о фильтрации и маппинге появятся только при вызове collect, а не при создании стрима.