reduce 用于归约操作 (将流归约成一个值)
1.求和:
有初始值
int sum = numbers.stream().reduce(0, (a, b) -> a + b);
reduce接受两个参数: 一个初始值,这里是0; 一个BinaryOperator<T>来将两个元素结合起来产生一个新值,这里我们用的是 lambda (a, b) -> a + b。 你也很容易把所有的元素相乘,只需要将另一个Lambda:(a, b) -> a * b传递给reduce 操作就可以了:
int product = numbers.stream().reduce(1, (a, b) -> a * b);
无初始值:
reduce还有一个重载的变体,它不接受初始值,但是会返回一个Optional对象:
Optional<Integer> sum = numbers.stream().reduce((a, b) -> (a + b));
2.最大值和最小值
Optional<Integer> max = numbers.stream().reduce(Integer::max);
Optional<Integer> min = numbers.stream().reduce(Integer::min);