我正在读"Java in Action"一书.
我在书中看到了Stream的示例代码.
List<String> names = menu.stream()
.filter(d -> {
System.out.println("filtering" + d.getName());
return d.getCalories() > 300;
})
.map(d -> {
System.out.println("mapping" + d.getName());
return d.getName();
})
.limit(3)
.collect(toList());
Run Code Online (Sandbox Code Playgroud)
执行代码时,结果如下.
filtering __1__.
mapping __1__.
filtering __2__.
mapping __2__.
filtering __3__.
mapping __3__.
Run Code Online (Sandbox Code Playgroud)
也就是说,因为limit(3),日志消息只打印3次!在本书中,这被称为"循环融合".但是,我不明白这一点.因为,如果您知道对象是否已过滤,则必须计算过滤功能.然后,我认为应该打印"过滤......"信息.
请解释一下循环融合如何在内部工作.