Stream的归约处理

归约:将流中的元素组合起来,用reduce操作来表达更复杂的查询。查询需要将流中的所有元素反复结合起来,得到一个值,这样的操作可以叫归约操作。

reduce接受两个参数:
一个初始值
一个Lambda来把两个流元素结合起来并产生一个新值

元素求和:用reduce提高复用,减少代码的迁移量。


int sum = 0;for (int x : numbers) {sum += x;}//循环累加
int sum = numbers.stream().reduce(0, (a, b) -> a + b);//reduce累加
int sum = numbers.stream().reduce(0,Integer::sum);//reduce累加调用类中的静态方法累加。
int product = numbers.stream().reduce(1, (a, b) -> a * b);//reduce相乘
Optional<Integer> sum = numbers.stream().reduce((a, b) -> (a + b));//无初始值,防止出现累加没有值的情况,所以返回值用Optional<Integer>

最大值和最小值:类似于求和,找到俩个元素对比的最大值、最小值。返回对应的值,当流结束的时候即得到需要的值。


Optional<Integer> max = numbers.stream().reduce(Integer::max);//最大值
Optional<Integer> max = numbers.stream().reduce(Integer::min);//最小值

 

版权声明:
作者:Gomo
链接:https://www.develophm.com/index.php/stream%e7%9a%84%e5%bd%92%e7%ba%a6%e5%a4%84%e7%90%86/439/
来源:开发之家
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>