gpt4 book ai didi

java - 通过添加类的两个 BigDecimal 类型属性进行分组

转载 作者:搜寻专家 更新时间:2023-11-01 01:31:12 24 4
gpt4 key购买 nike

我想要同一类的两个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com