首页 > 编程语言 >JAVA8 lambda之reduce三种用法

JAVA8 lambda之reduce三种用法

时间:2022-12-13 08:34:20浏览次数:60  
标签:List reduce System final list println lambda JAVA8 out

reduce操作可以根据指定的计算模型,实现从Stream中生成一个指定类型的值。

一,用法1

未定义初始值,从而第一次执行的时候第一个参数m的值是Stream的第一个元素,第二个参数n是Stream的第二个元素。

 

        final List<Integer> list = List.of(1, 2, 3);
        final int sum = list.stream().reduce((m, n) -> {
            System.out.println("m:" + m);
            System.out.println("n:" + n);
            return m + n;
        }).get();
输出结果:
m:1
n:2
m:3
n:3
sum:6

二,用法2

定义了初始值,从而第一次执行的时候第一个a参数的值是初始值4,第二个参数b是Stream的第一个元素,方法的返回结果和初始值类型必须一致。

  final List<Integer> list = List.of(1, 2, 3);
  final int sum1 = list.stream().reduce(4, (a, b) -> {
            System.out.println("a:" + a);
            System.out.println("b:" + b);
            return a + b;
        });
输出结果:
a:4
b:1
a:5
b:2
a:7
b:3
sum1:10

三,用法3:奇怪的存在(有点整不懂)

第一个参数类型是实际返回实例的数据类型,可以返回任意类型的数据。

第二个参数累加器,声明累加你的数据来源t的逻辑。

第三个参数函数用来组合两个值,而这两个值必须与第二个函数参数相兼容,也就是说它们所得的结果是一样的,他主要是用来处理并发操作,如何处理数据的重复性,应多做考虑,否则会出现重复数据。

例子1:


  final List<Integer> list = List.of(1, 2, 3);
final int sum2 = list.stream().reduce(4, (a, b) -> {
            System.out.println("a:" + a);
            System.out.println("b:" + b);
            return a + b;
        }, (x, y) -> {
            System.out.println("x:" + x);
            System.out.println("y:" + y);
            return x + y;
        });
输出结果:第三个参数x,y没有起作用(因为不是并发【parallelStream】)
a:4
b:1
a:5
b:2
a:7
b:3
sum2:10

例子2:

 
final List<Integer> list = List.of(1, 2, 3);
final int sum2 = list.parallelStream().reduce(4, (a, b) -> { System.out.println("a:" + a); System.out.println("b:" + b); return a + b; }, (x, y) -> { System.out.println("x:" + x); System.out.println("y:" + y); return x + y; });
输出结果:
a:4
b:2
a:4
b:3
a:4
b:1
x:6
y:7
x:5
y:13
sum2:18

例子3:

final List<Integer> list = List.of(1, 2, 3); 
final List sum3 = list.parallelStream().reduce(new ArrayList(), (a, b) -> {
            System.out.println("a:" + a);
            System.out.println("b:" + b);
            a.add(b);
            return a;
        }, (final List<Integer> x, final List<Integer> y) -> {
            System.out.println("x:" + x);
            System.out.println("y:" + y);
            return x;
        });
输出结果:
a:[]
b:2
a:[]
b:3
a:[2]
b:1
x:[2, 3]
y:[2, 3, 1]
x:[2, 3, 1]
y:[2, 3, 1]
sum3:[2, 3, 1]

 

参考:
https://www.bbsmax.com/A/QV5ZnP725y/
https://blog.csdn.net/zhang89xiao/article/details/77164866

标签:List,reduce,System,final,list,println,lambda,JAVA8,out
From: https://www.cnblogs.com/l-liu/p/16976702.html

相关文章