Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpStIm 37 of 322 menu
◀ ▶

Промежуточные операции потока в Java

Промежуточная операция возвращает новый поток и описывает, что сделать с каждым элементом. Пока нет конечной команды, тело шага может даже не вызываться: цепочка лишь хранит план работы.

В map добавим печать номера элемента и умножение, а конечный шаг намеренно не вызовем:

import java.util.List; public class Main { public static void main(String[] args) { List<Integer> data = List.of(1, 2, 3); var pending = data.stream().map(n -> { System.out.println("map " + n); return n * 10; }); System.out.println("built"); } }

В консоли появится только строка "built". Сообщения "map …" не печатаются: цепочка сохранена, но элементы еще не просили.

Шаги выполняются в том порядке, в котором они записаны. Один и тот же набор команд дает разный объем работы, если переставить filter и map местами:

import java.util.List; public class Main { public static void main(String[] args) { List<Integer> nums = List.of(2, 3, 4, 5); List<Integer> viaFilter = nums.stream() .filter(n -> n >= 4) .map(n -> n * 2) .toList(); List<Integer> viaMap = nums.stream() .map(n -> n * 2) .filter(n -> n > 6) .toList(); System.out.println(viaFilter); System.out.println(viaMap); } }

Списки совпадают, но во втором случае map сработал четыре раза. На длинной цепочке такая перестановка заметно меняет объем работы.

Дан код:

var nums = List.of(1, 2, 3, 4, 5);

Сначала оставьте числа больше двух, затем прибавьте единицу и соберите список. Выведите его.

Для того же списка прибавьте единицу до отбора по условию n > 2. Сравните результат с предыдущей задачей.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить