how to use recursion logic in java to find list of Managers reporting directly or indirectly to a specific manager

BlueMoon :

consider the table,

+--------------+-------------------+
|  managerId   | ReportingManagerId|
+--------------|-------------------|
|  1           | null              |
|  2           | null              |
|  3           | 1                 |
|  4           | 1                 |
|  5           | 3                 |
|  4           | 5                 |
|  8           | 4                 |
+--------------+-------------------+

Now how do i fetch all these managerId when i pass ManagerId 1. I should get list of all these managers as they are reporting to 1 directly or indirectly. how to achieve this with the help of recursion in java?

public List<Manager> getAllSubManagers(Manager manager) {
    List<Manager> subManagers = ManagerHierarchyRepository.findByReportingManager(manager).stream()
            .map(ManagerHierarchy::getmanager).collect(Collectors.toList());
    List<Manager> newSubManagers = new ArrayList<>();
    if (!subManagers.isEmpty()) {
        for (int i = 0; i < subManagers.size(); i++) {
            newSubManagers = getAllSubManagers(subManager.get(i));
        }
        subManagers.addAll(newManagers);
    }
    return subManagers;
}

Please check whats wrong with the above code. Expected Result when i pass manager of id 1 : should have managers of ids:3,4,5,6,8

Mohammed Shirhaan :

newSubManagers is loosing the old value because of '='. Use addAll method instead to append to the list.

public List<Manager> getAllSubManagers(Manager manager) {
List<Manager> subManagers = ManagerHierarchyRepository.findByReportingManager(manager).stream()
        .map(ManagerHierarchy::getmanager).collect(Collectors.toList());
List<Manager> newSubManagers = new ArrayList<>();
if (!subManagers.isEmpty()) {
    for (int i = 0; i < subManagers.size(); i++) {
        //change '=' to addAll
        newSubManagers.addAll(getAllSubManagers(subManager.get(i)));
    }
    subManagers.addAll(newManagers);
}
return subManagers;
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=149300&siteId=1