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