Назад к вопросам
Senior
5
var list = List.of(5, 13, 34); list.stream() .map(x -> x % 10) .peek(System.out::println) .filter(x -> x > 3) .forEach(System.out::println); List<String> animals = List.of("dog", "cat", "parrot"); animals.stream() .sorted() .peek(item -> System.out.println(item)) .map(String::length); System.out.println(animals);
Компании, где спрашивали
ТБанк
Ответ от нейросети
sobes.tech AI
В первом примере с числовым списком:
var list = List.of(5, 13, 34);
list.stream()
.map(x -> x % 10) // Преобразуем числа к их последней цифре: 5, 3, 4
.peek(System.out::println) // Выводим каждую последнюю цифру
.filter(x -> x > 3) // Фильтруем только цифры больше 3: 5, 4
.forEach(System.out::println); // Выводим отфильтрованные цифры
Вывод будет:
5
3
4
5
4
Пояснение: peek выводит все последние цифры, а forEach — только те, что больше 3.
Во втором примере с животными:
List<String> animals = List.of("dog", "cat", "parrot");
animals.stream()
.sorted() // Сортируем: cat, dog, parrot
.peek(item -> System.out.println(item)) // Выводим отсортированные элементы
.map(String::length); // Преобразуем в длину строк, но результат не используется
System.out.println(animals);
Здесь map не вызывает терминальную операцию, поэтому стрим не выполняется, и peek не выводит ничего. В итоге на экран будет выведен исходный список [dog, cat, parrot].
Чтобы исправить, нужно добавить терминальную операцию, например collect или forEach.
Ключевые моменты:
peekиспользуется для отладки, но без терминальной операции стрим не выполняется.- Терминальная операция обязательна для запуска обработки стрима.
mapбез терминальной операции не приводит к выполнению.
Пример исправления второго кода:
animals.stream()
.sorted()
.peek(System.out::println)
.map(String::length)
.forEach(len -> {}); // или collect(Collectors.toList())
Тогда peek выведет отсортированные элементы.