Java Stream的peek()方法详解

IT 文章2年前 (2023)发布 小编
0 0 0

Java Stream的peek()方法返回一个新的Stream,它包含来自原始Stream的所有元素,这些元素在应用给定的Consumer操作后产生。

请注意,peek()方法是一种中间Stream操作,因此要处理通过peek()方法产生的Stream元素,我们必须使用终端操作。如果不使用任何终端操作而只使用Stream.peek(),则不会有任何效果。

1.Stream peek()方法

1.1 用途

根据Java文档,当我们想要看到在流处理管道中流动的具体元素时,peek()方法可以有效帮助我们实现相关调试。

ad

程序员导航

优网导航旗下整合全网优质开发资源,一站式IT编程学习与工具大全网站

我们可以在每个中间操作之后调用peek()方法,以查看中间操作对Stream元素的影响。

Stream<T> stream = createStream();
stream.operationOne()
	.peek()
	.operationTwo()
	.peek()
	.terminalOperation();

1.2 方法语法

peek()返回一个新的Stream,该Stream由来自原始Stream的元素组成。

这里的action是对元素进行消费的中间操作,它对从Stream中消费的元素执行非干扰操作,并将执行操作后的结果元素放入新的Stream中。

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

1.3 描述

  • Stream peek()方法是中间操作。
  • 它返回一个由当前流的元素组成的Stream。
  • 它还对每个元素执行提供的Consumer操作。
  • 对于并行流管道,该操作可能在任何时间、任何线程中由上游操作提供元素时被调用。
  • 如果操作修改共享状态,则它本身负责提供所需的同步。
  • peek()主要用于支持调试,我们希望在元素流经管道的某个点时看到它们。

2.Stream peek()示例

2.1 使用没有终端操作的peek()

如上所述,没有终端操作的Stream.peek()没有任何效果。

ad

AI 工具导航

优网导航旗下AI工具导航,精选全球千款优质 AI 工具集

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream()
  .peek( System.out::println );   //啥输出也没有

2.2 使用带有终端操作的peek()

Java程序使用peek() API来调试Stream操作,并记录在处理过程中Stream的元素。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> newList = list.stream()
      .peek(System.out::println)
      .collect(Collectors.toList());
System.out.println(newList);

输出:

1
2
3
4
5
[1, 2, 3, 4, 5]

3.结论

Stream.peek()方法可以帮助我们可视化流操作的行为,并理解复杂中间流操作的含义和交互。尽管可以修改流中元素的内部状态,但强烈建议不要这样做。

© 版权声明

相关文章

暂无评论

暂无评论...