很简单:
import java.util.stream.*;
public class MyClass {
public static void main(String args[]) {
Long x = Stream.of(1, 2, 3).map(i -> {
System.out.println(i);
return i + 4;
}).count();
System.out.println(x); // prints '3'
}
}
Run Code Online (Sandbox Code Playgroud)
这里count()用于触发中间操作,其中包括System.out.println(i),但不会从内部打印任何内容map()。这是为什么?
流是懒惰且聪明的。由于您的终端操作是count,它不关心单个元素,而只关心它们的数量,因此map不会被调用。
替换count为需要计算各个元素的内容,例如sum- 和mapwill be called。
Long x = Stream.of(1, 2, 3).map(i -> {
System.out.println(i);
return i + 4;
})
.mapToLong(Long::valueOf)
.sum(); // prints 1 2 3
System.out.println(x); // prints 18
Run Code Online (Sandbox Code Playgroud)
评论中的人也正确地提醒您副作用。
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |