Просмотр элементов потока в Java
Метод peek принимает действие над каждым
элементом и возвращает тот же поток дальше.
Элементы не заменяются: шаг нужен для отладки,
логирования или счетчика во время конечной операции.
Пока цепочка не завершена, peek ничего не
печатает. После toList сообщения идут в
момент реального обхода:
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> nums = List.of(3, 8, 1);
List<Integer> picked = nums.stream()
.filter(n -> n > 2)
.peek(n -> System.out.println("seen " + n))
.map(n -> n * 10)
.toList();
System.out.println(picked);
}
}
peek не заменяет нормальную обработку данных.
Тяжелую логику в нём лучше не держать: побочные
эффекты должны оставаться прозрачными для читателя
цепочки.
Дан код:
var strings = List.of("a", "bb", "ccc");
На шаге filter оставьте строки длиннее одного символа, в peek печатайте длину, затем соберите список и выведите его.
Для чисел List.of(4, 5, 6) постройте поток
с peek, который печатает удвоенное значение,
но не вызывайте конечную операцию. Выведите
"wait", затем посчитайте сумму и сверьте порядок строк в консоли.