目录
reduce()简介
reduce三个override方法
reduce(U identity, BiFunction accumulator, BinaryOperator combiner),>
在学习Stream的reduce过程中,对于reduce的第三个方法第一时间有点看不太懂,便记录一下学习过程吧。
根据指定的计算模型将Stream中的值计算得到一个最终结果:reduce可以实现从Stream中生成一个值,其生成的值不是随意的,而是根据指定的计算模型。
Optional reduce(BinaryOperator accumulator);
T reduce(T identity, BinaryOperator accumulator);
U reduce(U identity, BiFunction accumulator,
BinaryOperator combiner);
本文要讲的是第三个方法,其中的参数列表为:
这一大段的文字,我们转换成伪代码看看:
容器x = list.stream().reduce(最终返回的容器x, (容器x, 元素y) -> {
容器x与元素y之间的逻辑操作;
return 容器x;
}, (x, y) -> {
并行的时候才会执行;
x和y是每个线程的返回的容器x;
这里进行各个容器的累计操作;
return x;
});
到了这里,想必你已经对reduce的第三个方法有初步认识了,接下来我们通过例子操作看看。
@Data
public class Employee{
private String name;
private String programingLanguage;
private Double salary;
private Integer age;
}
@Test
public void reduceTest() {
List list= new ArrayList() {
{
add(new Employee("Free", "male", 5000, 18));
add(new Employee("Tamsen", "female", 8371, 55));
add(new Employee("Hadley", "male", 7322, 25));
add(new Employee("Truman", "female", 15020, 15));
add(new Employee("Matilda", "male", 5272, 25));
add(new Employee("Pansy ", "female", 9057, 87));
add(new Employee("Keene", "male", 8120, 99));
add(new Employee("Jayden", "female", 8500, 25));
add(new Employee("Homer", "male", 6000, 14));
add(new Employee("Ridley", "female", 5426, 20));
}
};
ArrayList newList = list.stream().reduce(new ArrayList()
, (elist, employee) -> {
if (employee.getSalary() > 6000) {
elist.add(employee);
}
System.out.println("BiFunction: elist size = " + elist.size());
return elist;
}, (elist1, elist2) -> {
elist1.addAll(elist2);
System.out.println("BinaryOperator: elist1 size = " + elist1.size());
return elist1;
});
}
代码执行的结果为:
BiFunction: elist size = 0
BiFunction: elist size = 1
BiFunction: elist size = 2
BiFunction: elist size = 3
BiFunction: elist size = 3
BiFunction: elist size = 4
BiFunction: elist size = 5
BiFunction: elist size = 6
BiFunction: elist size = 6
BiFunction: elist size = 6[Employee(name=Tamsen, gender=female, salary=8371, age=55), Employee(name=Hadley, gender=male, salary=7322, age=25), Employee(name=Truman, gender=female, salary=15020, age=15), Employee(name=Pansy , gender=female, salary=9057, age=87), Employee(name=Keene, gender=male, salary=8120, age=99), Employee(name=Jayden, gender=female, salary=8500, age=25)]
参考文章https://www.cnblogs.com/MrYuChen-Blog/p/14061320.html