stream中reduce的三种用法
概述
1. stream API中提供的reduce方法是经常被用到的,也是比较难理解的。它的作用主要是对流中的数据按照指定的计算方式计算出一个结果(缩减操作)。
2. reduce方法有三个override的方法,分别接受1个参数,2个参数,和3个参数,下面来依次介绍
一、2个参数
为了方便理解,我们先从2个参数的reduce方法开始介绍。
我们先看下这段代码:
1 // 初始化值 2 int sum = 0; 3 List list={1,2,3,4,5}; 4 for (n : list) { 5 // 指定计算方式 6 sum = (sum, n) -> sum + n; 7 8 } 9 return sum;
再来看下reduce两个参数的重载形式,与上面for循环的代码很相似,其内部的计算方式如下:
1 T result = identity 2 for(T element: this stream) 3 result = accumulator.apply(result,element) 4 5 return result;
可见,reduce的作用是把stream中的元素给组合起来,我们可以传入一个初始值,它会按照我们的计算方式依次拿流中的元素和初始化值进行计算,计算结果再和后面
的元素计算
举例:
1 public static void main(String[] args) { 2 3 /*Integer sum1 = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9).reduce(0, new BinaryOperator<Integer>() { 4 @Override 5 public Integer apply(Integer integer, Integer integer2) { 6 return integer + integer2; 7 } 8 });*/ 9 10 // lambda表达式 11 int sum1 = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9).reduce(0, (n1, n2) -> n1 + n2); 12 System.out.println("累加和为:" + sum1); //累加和为:45 13 }