Я хочу получить сумму двух атрибутов типа BigDecimal одного и того же класса и сгруппировать их с некоторым другим атрибутом класса.
Я пытался использовать методы Collectors.groupingBy () и Collectors.reduc (), но это применимо только для одного атрибута, который можно суммировать.
Класс сотрудника имеет следующие атрибуты:
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.reduc () Я хочу сумму зарплаты и бонусов, которые будут сгруппированы вместе с соответствующими отделами. Например,
Отдел А -
Сотрудник 1- Зарплата 1000, Бонус 100
Сотрудник 2 - Зарплата 2000, Бонус 100
Отдел B -
Сотрудник 3 - Зарплата 5000, Бонус 100
Теперь я хочу карту, как показано ниже:
[Отдел-А, 3200], [Отдел-б, 5100]