【问题标题】:how to use recursion logic in java to find list of Managers reporting directly or indirectly to a specific manager如何在java中使用递归逻辑来查找直接或间接向特定经理报告的经理列表
【发布时间】:2019-05-08 09:50:09
【问题描述】:

考虑一下表格,

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

现在,当我通过 ManagerId 1 时,我如何获取所有这些 managerId。我应该得到所有这些经理的列表,因为他们直接或间接地向 1 报告。 如何借助 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;
}

请检查上面的代码有什么问题。 当我通过 id 1 的经理时的预期结果:应该有 ids:3,4,5,6,8 的经理

【问题讨论】:

  • 确实根据您的输入表(如上所示)理解了您的问题。你能提供更多信息吗?
  • 什么不起作用?

标签: java list recursion


【解决方案1】:

newSubManagers 由于“=”而失去旧值。改用 addAll 方法追加到列表中。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多