// 传统写法 int sum = 0; for (int x : numbers) { sum += x; }
// Stream 写法 int sum = numbers.stream().reduce(0, (a, b) -> a + b); int sum = numbers.stream().reduce(0, Integer::sum); Optional<Integer> sum = numbers.stream().reduce((a, b) -> (a + b));
最大值和最小值:
1 2
Optional<Integer> max = numbers.stream().reduce(Integer::max); Optional<Integer> min = numbers.stream().reduce(Integer::min);
数值流:
1
int calories = menu.stream().map(Dish::getCalories).reduce(0, Integer::sum);
它有一个暗含的装箱成本。每个 Integer 都必须拆箱成一个原始类型,再进行求和。
Java8 中引入了三个原始类型流接口: IntStream 、 DoubleStream 和LongStream ,分别将流中的元素特化为 int 、 long 和 double ,从而避免了暗含的装箱成本。