【发布时间】:2019-01-08 18:38:03
【问题描述】:
我想要同一类的两个 BigDecimal 类型属性的总和,并将它们与该类的其他一些属性分组。
我尝试使用 Collectors.groupingBy() 和 Collectors.reducing() 方法,但这仅适用于可以总结的一个属性。
Employee 类具有以下属性:
class Employee{
private String name;
private BigDecimal salary;
private BigDecimal bonus;
private String department;
// Getters and Setters
}
employeeList.stream().collect(Collectors.groupingBy(
Employee::getDepartment, Collectors.reducing(
BigDecimal.ZERO,
(id, emp) -> id.add(emp.getSalary().add(emp.getBonus)),
BigDecimal::add)));
根据最后一段代码,Collectors.reducing() 我想要将与各个部门一起分组的薪水和奖金的总和。例如,
A部-
员工1-薪水1000,奖金100
员工 2- 薪水 2000,奖金 100
B部-
员工 3 - 薪水 5000,奖金 100
现在我想要一张如下图:
[A 部门,3200],[B 部门,5100]
【问题讨论】:
-
试试这个
employees.stream().collect(Collectors.groupingBy( Employee::getDepartment, Collectors.reducing( BigDecimal.ZERO, Employee::getSum, BigDecimal::add)));并定义一个方法如BigDecimal getSum(){ return this.bonus.add(this.salary); }
标签: java java-8 java-stream