我想要同一类的两个 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
现在我想要一张像下面这样的 map :
[部门-A, 3200],[部门-b, 5100]
最佳答案
为了达到那个效果,你需要组合两个独立的Collectors
:groupingBy() 和reducing():
Map<String, BigDecimal> result = employeeList.stream()
.collect(Collectors
.groupingBy(Employee::getDepartment, Collectors
.reducing(BigDecimal.ZERO, e -> e.getBonus().add(e.getSalary()), BigDecimal::add)));
输出:
{DepartmentB=5100, DepartmentA=3200}
关于java - 通过添加类的两个 BigDecimal 类型属性进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54097743/