java - Java 8 与 Java 9 中的 Stream.peek() 方法

标签 java lambda java-8 java-9 peek

我正在学习 Java 8 lambda 表达式,并想询问以下与 peek 相关的 Java 代码。我遇到的函数接口(interface)中的方法。

在 IDE 上执行程序时,它没有输出。我期待它会给出 2, 4, 6.

import java.util.Arrays;
import java.util.List;

public class Test_Q3 {

    public Test_Q3() {
    }

    public static void main(String[] args) {
        List<Integer> values = Arrays.asList(1, 2, 3);
        values.stream()
              .map(n -> n * 2)
              .peek(System.out::print)
              .count();
    }
}

最佳答案

我假设您在 Java 9 下运行它?您没有更改流的 SIZED 属性,因此根本不需要执行 mappeek

换句话说,您只关心 count 作为最终结果,但同时您不会更改 any 中 List 的初始大小 方式(例如通过 filterdistinct)这是在 Streams 中完成的优化。

顺便说一句,即使您添加了一个虚拟过滤器,这也会显示您的期望:

values.stream ()
      .map(n -> n*2)
      .peek(System.out::print)
      .filter(x -> true)
      .count();

关于java - Java 8 与 Java 9 中的 Stream.peek() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48221783/

相关文章:

lambda - 从 Java8 lambda 返回相同的对象

java - 如何使用 Java 8 流从列表列表中获取最大列表的大小?

java - Apache Beam PubSubIO 写入

lambda - Java Lambda-检查要流的ArrayList是否为空

java - 从 ResultSet 获取结果时遇到问题

java - 更新文本区域

C# Lambda 表达式和 NHibernate

amazon-web-services - 将存储桶名称作为变量引用到 serverless.yml 中的 s3 事件中的资源

java - RxJava2 : need help to fix an issue in code

java - 为什么将两个连接的字符串分配给另一个字符串不起作用?