我正在学习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();