Sobes.tech
Назад к вопросам
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 выведет отсортированные элементы.