Java 泛型、集合与 Lambda 内置函数式接口
集合流操作优化
在 Java 编程中,集合流操作是常见的操作。例如有如下代码:
// 原代码
IntStream.rangeClosed(0, 10)
.map(i -> i * i)
.filter(i -> (i % 2) == 0)
.forEach(System.out::println);
此代码会打印出:
0
4
16
36
64
100
但原代码会不必要地计算奇数的平方,因为奇数的平方总是奇数。我们可以改变 map
和 filter
操作的顺序来消除这些不必要的计算:
IntStream.rangeClosed(0, 10)
.filter(i -> (i % 2) == 0)
.map(i -> i * i) // call map AFTER calling filter
.forEach(System.out::println);
输出结果是相同的。这个简单的例子展示了有时可以改变中间操作的顺序而不改变行为。
终端操作
在流管道的末尾需要提供一个终端操作。这个终端操作通常会产生一个结果,例如在