Как заполнить коллекцию Map>?
Есть список работников Employee. Каждый работник прикреплен к конкретному отделу(например: бухгалтер). И у каждого отдела есть руководитель. Мне необходимо составить такую Map'у, в которой руководитель был бы ключом, а список его подопечных значением. Что только я не пробовал сделать и как только не старался реализовать, никак не получалось. Как можно это реализовать?
List<Employee> employees = employeeRepository.findAllByIdIn(employeesIds); // Employees
//
List<Department> allApiActualDepartments = departmentRepository.findAll;
// Ключ: ИД департамента - Значение: ДОК_ИД руководитель
Map<String, String> departmentManagerMap = new HashMap<>();
allApiActualDepartments.forEach(e -> departmentManagerMap.put(e.getId(), e.getDepartmentManagerId())); // Заполнил
Map<Employee, List<Employee>> employeesWithManagers = new HashMap<>(); // Создал ту самую Map'у, осталось запонить
// Я ПЫТАЛСЯ ЗАПОЛНИТЬ Map'у ЧЕРЕЗ ЦИКЛ, НО НИКАК НЕ ПОЛУЧИЛОСЬ
for (Employee m : employees) {
// Достал руководителя отдела из БД через репозиторий используя DOC_ID
Employee manager = employeeRepository.findFirstByDocID(departmentManagerMap.get(m.getDepartment().getId()));
}
Подскажите варианты реализации.
P.S. В классе Employee есть поле String departmentId(по нему можно узнать, принадлежит ли человек к определенному отделу или нет).
Ответы (1 шт):
Автор решения: denis Krivorutchko
→ Ссылка
public class Main {
public static void main(String[] args) {
// имитация БД
List<Employee> SimpleEmployees = new ArrayList<>();
SimpleEmployees.add(new Employee(false));
SimpleEmployees.add(new Employee(false));
SimpleEmployees.add(new Employee(false));
SimpleEmployees.add(new Employee(false));
// имитация БД
List<Employee> TheBossList = new ArrayList<>();
TheBossList.add(new Employee(true));
Map<Employee, List<Employee>> employeesWithManagers
= new HashMap<>();
// вот тут пройдемся по мапе и положим туда что-то
for (Map.Entry<Employee, List<Employee>> entry : employeesWithManagers.entrySet()) {
// получаем к и v если нада сделать дополнительные проверки
// if k==Employee.isTheBoss();
Employee k = entry.getKey();
List<Employee> v = entry.getValue();
employeesWithManagers.put(TheBossList.get(0),
SimpleEmployees);
}
// или же через стримы
employeesWithManagers.forEach((k,v) ->
employeesWithManagers.put(TheBossList.get(0),
SimpleEmployees));
}
}