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;
}