Почему получаю пустую 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);}
           );
→ Ссылка