Почему получаю пустую HashMap таблицу?
Есть три типа рабочих - Manager, Worker, Trainee. Trainee, Worker наследуются от Employee, Manager от Worker.
Надо общитать сколько заработал каждый тип сотрудников - Manager, Worker, Trainee.
payroll - метод, который вычисляет заработок каждого рабочего из листа employees и возвращает список пэйролов, в котором каждый элемент содержит 2 поля - ссылку на сотрудника и BigDecimal сумму заработка (он список возвращает - проверил). Компиляция проходит без ошибок, но на выходе пустая мапа.
public static HashMap <String, BigDecimal> everyKindEmployeeEarn (List<Employee> employees){
HashMap <String, BigDecimal> mapa = new HashMap<>();
payroll(employees).stream().
map((i)->mapa.containsKey(i.getEmployee().getClass().getSimpleName())?
mapa.put(i.getEmployee().getClass().getSimpleName(),
(mapa.get(i.getEmployee().getClass().getSimpleName())).add(i.getSalaryPlusBonus())):
mapa.put(i.getEmployee().getClass().getSimpleName(), i.getSalaryPlusBonus()));
return mapa;
}
Ответы (1 шт):
Автор решения: vasilua
→ Ссылка
Как оказалось map не работает с внешними переменными. Я ее использовал как неприхотливый итератор, но он так не работает. Когда переделал код под forEach - все заработало.
employees.stream().filter(i->i instanceof Manager).
forEach((i)-> {Integer temp = mapa.containsKey(i.getManager())?
mapa.put(i.getManager(), mapa.get(i.getManager())+1):
mapa.put(i.getManager(), 1);}
);