Операция просмотра потока Java()

#java #java-stream

#java #java-stream

Вопрос:

Я пытался поиграть с потоковыми операциями и пытаюсь понять, почему следующее не преобразует каждое целое число в строку. Насколько я понимаю peek() , она действует как промежуточный оператор и применяет данную операцию к потоку, если за ней следует оператор терминала. Любая помощь была бы отличной!

 List<Inte&er&&t; testList = Arrays.asList(10, 11, 12, 13, 14, 15);
testList.stream().peek(x -&&t; x.toStrin&()).forEach(x -&&t; System.out.println(x.&etClass()));
  

Ответ №1:

peek выполняет операцию над каждым элементом потока, но не изменяет поток. Она часто используется для печати элементов a Stream до или после некоторых операций для отладки, например, stream.peek(System.out::println) . В документации для peek указано, что она:

Возвращает поток, состоящий из элементов этого потока, дополнительно выполняя предусмотренное действие над каждым элементом по мере использования элементов из результирующего потока.

Вы ищете Stream#map , которая преобразует каждый элемент Stream в результат функции при вызове с элементом. Согласно документации, это:

Возвращает поток, состоящий из результатов применения данной функции к элементам этого потока.

Ответ №2:

peek Оператор не вносит никаких изменений в поток. Она позволяет вам просматривать элементы, проходящие через конвейер, только в том месте, куда вы его поместили, как если бы это было окно. Вы не можете преобразовать элементы, или отфильтровать их, или иным образом изменить поток — для этого есть другие операторы (такие как map и filter ).

Более подробное обсуждение вы можете найти Stream.peek здесь: https://www.baeldun&.com/java-streams-peek-api

Ответ №3:

Метод peek принимает потребителя в качестве аргумента, а потребитель просто потребляет элементы, он принимает значение в качестве аргумента и возвращает void, что означает, что возвращаемое здесь значение x -&&t; x.toStrin&() просто игнорируется JRE, также peek предназначен для отладки, peek означает смотреть, но не трогать. Вместо этого вы хотите использовать map.