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

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

在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属性,因此根本不需要执行map或peek.

换句话说,你所关心的只是作为最终结果计算,但同​​时你不会以任何方式改变List的初始大小(例如通过过滤器或不同)这是在Streams中完成的优化.

顺便说一句,即使你添加一个虚拟过滤器,这将显示你的期望:

values.stream ()
      .map(n -> n*2)
      .peek(System.out::print)
      .filter(x -> true)
      .count();
上一篇:集合系列 List(五):Stack


下一篇:c++中的cin.peek()和cin.get()