小编Soh*_*Ahn的帖子

Java-8中Stream的循环融合(内部如何工作)

我正在读"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次!在本书中,这被称为"循环融合".但是,我不明白这一点.因为,如果您知道对象是否已过滤,则必须计算过滤功能.然后,我认为应该打印"过滤......"信息.

请解释一下循环融合如何在内部工作.

java java-8 java-stream

3
推荐指数
1
解决办法
2340
查看次数

标签 统计

java ×1

java-8 ×1

java-stream ×1