JDK1.8Stream API之reduce和collect方法
规约
reduce(T identity ,BinaryOperator) /reduce(BinaryOperator) 将流中元素反复结合起来,得到一个值.
测试数据
List<Employee> employees = Arrays.asList(
new Employee("张三",18,9999.99, Employee.Status.FREE),
new Employee("李四",38,4555.66, Employee.Status.BUSINESS),
new Employee("王五",50,6666.66, Employee.Status.FREE),
new Employee("赵六",16,7777.77, Employee.Status.BUSINESS),
new Employee("田七",8,8888.88, Employee.Status.VOCATION),
new Employee("田七",8,8888.88, Employee.Status.VOCATION)
);
@Test
public void test(){
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9);
Integer sum = list.stream()
.reduce(0, (x, y) -> x + y);
System.out.println(sum);//计算集合中所有元素的总和
//计算公司员工工资总和 没有起始值 sum2可能会null map-reduce模式
Optional<Double> sum2 = employees.stream()
.map(Employee::getSalary)
.reduce(Double::sum);
System.out.println(sum2);
}
收集
collect:将流转换为其他形式。接收一个Collector接口的实现,用于给Stream中的元素做汇总的方法。
@Test
public void test2()