Java Stream peek()方法详解

后端 潘老师 6个月前 (10-29) 300 ℃ (0) 扫码查看

Java Stream peek()方法返回一个新的Stream,由原始Stream中的所有元素组成,这些元素在应用给定的Consumer操作后产生。

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

1.Stream peek()方法

1.1用途

根据Java文档,peek()方法的目的是支持调试,尤其是当我们想要查看流经Stream处理管道的元素时。

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

Stream<T> stream = createStream();

stream.operationOne()
    .peek()
    .operationTwo()
    .peek()
    .terminalOperation();

1.2. 方法语法

peek()返回由原始Stream元素组成的新Stream。

这里,action是对消费的Stream元素执行的非干扰操作。执行操作后的元素结果被放入新的Stream中。

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

1.3. 描述

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

2. Stream peek()示例

2.1 无终端操作使用peek()

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

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
 
list.stream()
  .peek( System.out::println );   //什么也没打印出来

2.2.终端操作使用peek()

将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.结论

以上就是Java Stream peek()方法详解。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/back/10468.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】