РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
477 of 1163 menu

Метод peek класса Stream

Метод peek класса Stream является промежуточной операцией и возвращает новый поток, содержащий те же элементы, что и исходный. Отличие состоит в том, что для каждого элемента потока вызывается переданное действие. В параметр метода мы передаем объект типа Consumer, который описывает, что именно нужно сделать с каждым элементом. Чаще всего метод peek используют для отладки, логирования или выполнения побочных действий по ходу обработки потока.

Важно понимать, что peek сам по себе не запускает обработку потока. Поток является ленивым, поэтому действие будет выполнено только тогда, когда появится терминальная операция, например collect, forEach или count.

Синтаксис

Stream<T> peek(Consumer<? super T> action)

Пример

Давайте создадим поток из чисел и с помощью peek выведем каждое число в консоль, а затем соберем результат в список:

import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Integer> res = List.of(1, 2, 3, 4, 5) .stream() .peek(n -> System.out.println("Element: " + n)) .collect(Collectors.toList()); System.out.println(res); } }

Результат выполнения кода:

"Element: 1" "Element: 2" "Element: 3" "Element: 4" "Element: 5" [1, 2, 3, 4, 5]

Пример

Давайте применим peek после фильтрации, чтобы увидеть, какие элементы прошли отбор:

import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Integer> res = List.of(1, 2, 3, 4, 5) .stream() .filter(n -> n % 2 == 0) .peek(n -> System.out.println("Filtered: " + n)) .collect(Collectors.toList()); System.out.println(res); } }

Результат выполнения кода:

"Filtered: 2" "Filtered: 4" [2, 4]

Пример

Давайте посмотрим, как peek работает со строками, например, преобразуем каждую строку к верхнему регистру и выведем промежуточный результат:

import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<String> res = List.of("abcde", "12345") .stream() .peek(s -> System.out.println("Before: " + s)) .map(String::toUpperCase) .peek(s -> System.out.println("After: " + s)) .collect(Collectors.toList()); System.out.println(res); } }

Результат выполнения кода:

"Before: abcde" "After: ABCDE" "Before: 12345" "After: 12345" ["ABCDE", "12345"]

Смотрите также

  • метод filter,
    который отбирает элементы по условию
  • метод map,
    который преобразует каждый элемент потока
  • метод forEach,
    который выполняет действие для каждого элемента
  • метод collect,
    который собирает элементы потока в коллекцию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить