Java Stream peek() 方法及实例

Java Stream peek() 方法及实例

在Java中,Stream为处理数据提供了一个强大的选择,在这里我们将讨论其中一个非常常用的方法,名为 peek(),它是一个消费者动作 ,基本上返回一个由这个流的元素组成的流,另外在每个元素上执行所提供的动作,因为元素从结果流中被消耗。这是一个中间操作, 因为它创建了一个新的流,当它被遍历时,包含了初始流中符合给定谓词的元素。

语法

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

这里,Stream是一个接口,T是流元素的类型。 action 是一个非干扰性的动作,当元素从流中被消耗时,该函数返回新的流。现在我们需要通过下面列出的干净的java程序来了解peek()方法的生命周期,即其内部工作。

注意

  • 这个方法的存在主要是为了支持调试,当你想看到元素流过管道中的某一点时。
  • Java 9开始,如果事先知道元素的数量并且在流中没有变化,由于性能优化,.peek()语句将不会被执行。可以通过改变元素数量的命令(正式的)来强制执行其操作,例如:.filter(x -> true)。
  • 在没有任何终端操作的情况下使用peek不会有任何作用。

例1 :

// Java Program to Illustrate peek() Method
// of Stream class Without Terminal Operation Count
 
// Importing required classes
import java.util.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating a list of Integers
        List<Integer> list
            = Arrays.asList(0, 2, 4, 6, 8, 10);
 
        // Using peek without any terminal
        // operation does nothing
        list.stream().peek(System.out::println);
    }
}

输出

Java中的流 peek方法及实例

从上面的输出中,我们可以看出,这段代码不会产生任何输出:

例2 :

// Java Program to Illustrate peek() Method
// of Stream class With Terminal Operation Count
 
// Importing required classes
import java.util.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating a list of Integers
        List<Integer> list
            = Arrays.asList(0, 2, 4, 6, 8, 10);
 
        // Using peek with count() method,Method
        // which is a terminal operation
        list.stream().peek(System.out::println).count();
    }
}

输出

0
2
4
6
8
10

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程