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 作为最终结果,但与此同时,您不会更改任何内容中 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/58307385/

相关文章:

java - 在Java中的foreach循环中调用remove

java - 这是 Java 中 ServiceLocator 模式的有效实现吗?

java - 使用 openCSV 导出数据时是否可以删除分隔符?

java - 使用 Java 8 流 API 和 lambda 操作 map

java - 如何过滤动态嵌套的列表对象java 8

java - 代码不断向后向数组中输入值

java - Java 中指向 String 方法的函数指针

java - 在调用方法之前检查两个可选内容

java - 编译时间 : no instance(s) of type variable(s) U exist

Java 8 嵌套流 - 转换链式 for 循环