Java Stream peek()方法示例

Java 8 Stream接口具有peek(Consumer action)在应用方法参数Consumer操作后返回由原始 Stream 的所有元素组成的新 Stream 的方法。

Stream.peek()没有任何终端操作的情况下使用无用。

1。 Stream.peek()–语法

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

action是在元素从 Stream 中消耗时对其执行的无干扰操作。此方法返回由原始 Stream 的元素组成的新 Stream 。

2。 Stream.peek()–说明

  • Stream.peek()方法是一个中间操作。
  • 它返回由当前 Stream 的元素组成的 Stream 。
  • 它还action在每个元素上作为元素执行提供。
  • 对于并行 Stream 管道,action可以在任何时间和任何线程中通过上游操作使元素可用而调用。
  • 如果action修改共享状态,则它本身负责提供所需的同步。
  • 存在此方法主要是为了支持调试,我们希望在其中看到元素 Stream 过管道中特定点的情况。

3。 Java Stream peek()示例

3.1。无终端操作

如上所述,Stream.peek()没有任何终端操作就什么都不做。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

list.stream()
	.peek( System.out::println );		//prints nothing

程序输出。


3.2。带终端操作

Stream.peek() 使用终端操作也要执行调试操作。

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]

4。结论

Stream.peek()方法在可视化 Stream 操作的行为方式以及理解复杂的中间 Stream 操作的含义和交互方面非常有用。

尽管完全有可能更改 Stream 中元素的内部状态,但是从不建议这样做,应该避免。

参考:

Java Stream接口

saigon has written 1445 articles

Leave a Reply