stream中reduce的三种用法

发布时间 2023-05-05 18:02:12作者: 欢乐豆123

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     }