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

标签 java java-8 java-stream

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

相关文章:

java - 惰性流操作和 stream() 的未解析引用

Java collect 函数给出循环推理错误

java - 如何从迷宫求解算法中的错误路径返回? ( java )

java - 将现有库的升级版本发布到 Maven Central 时,是否必须创建 Sonatype JIRA 票证?

Java 8 并行流缩减——线程数与加速比

java - 如何在 Java 1.8 Streams 中仅当存在至少一个元素时才在 foreach 之前执行逻辑

Java 8 原始流到集合的映射方法

Java 8 过滤映射<String,List<Employee>>

java - 缺少 Artifact net.sourceforge.jdpapi :jdpapi-java:jar:1. 0.1

java - 在 Arquillian 测试中难以将包添加到 Shrinkwrap 存档中