Java 递归查询部门所有下属部门

1. 流程概述

在解决问题之前,我们需要先明确整个流程,下面是本次任务的流程图:

步骤 描述
1 输入要查询的部门ID
2 查询该部门的直属下属部门ID列表
3 遍历直属下属部门ID列表,对每个下属部门进行递归查询
4 输出查询结果

接下来,我们会一步一步地介绍每个步骤要做的事情,并提供相应的代码示例。

2. 查询直属下属部门ID列表

我们首先需要实现一个方法来查询指定部门的直属下属部门ID列表,可以使用数据库或者其他数据源来存储部门信息,这里我们以简单的示例来说明。

/**
 * 查询指定部门的直属下属部门ID列表
 * @param departmentId 部门ID
 * @return 直属下属部门ID列表
 */
public List<Integer> getSubDepartmentIds(int departmentId) {
    // TODO: 查询数据库或其他数据源,获取直属下属部门ID列表
    List<Integer> subDepartmentIds = new ArrayList<>();
    // 示例数据,假设部门1的直属下属部门为2、3、4
    if (departmentId == 1) {
        subDepartmentIds.add(2);
        subDepartmentIds.add(3);
        subDepartmentIds.add(4);
    }
    return subDepartmentIds;
}

代码解释:

  • getSubDepartmentIds 方法接受一个部门ID作为参数,返回一个直属下属部门ID列表。
  • 在实际应用中,可以根据需求来实现具体的数据查询逻辑,这里我们使用一个简单的示例来模拟数据库查询。
  • 在示例代码中,我们假设部门ID为1的直属下属部门为2、3、4,并将其添加到一个列表中作为返回值。

3. 递归查询下属部门

接下来,我们需要实现一个递归查询部门所有下属部门的方法,代码如下:

/**
 * 递归查询部门所有下属部门
 * @param departmentId 部门ID
 * @return 所有下属部门ID列表
 */
public List<Integer> getAllSubDepartmentIds(int departmentId) {
    List<Integer> allSubDepartmentIds = new ArrayList<>();
    // 查询直属下属部门ID列表
    List<Integer> subDepartmentIds = getSubDepartmentIds(departmentId);
    // 遍历直属下属部门ID列表,进行递归查询
    for (Integer subDepartmentId : subDepartmentIds) {
        // 递归查询下属部门的下属部门ID列表
        List<Integer> subSubDepartmentIds = getAllSubDepartmentIds(subDepartmentId);
        // 将下属部门ID列表添加到总列表中
        allSubDepartmentIds.addAll(subSubDepartmentIds);
    }
    // 将直属下属部门ID列表添加到总列表中
    allSubDepartmentIds.addAll(subDepartmentIds);
    return allSubDepartmentIds;
}

代码解释:

  • getAllSubDepartmentIds 方法接受一个部门ID作为参数,返回该部门的所有下属部门的ID列表。
  • 首先,我们调用上一步实现的 getSubDepartmentIds 方法来获取直属下属部门ID列表。
  • 然后,我们使用一个循环遍历直属下属部门ID列表,并对每个下属部门进行递归查询,将查询结果添加到总列表中。
  • 最后,我们将直属下属部门ID列表添加到总列表中,并返回总列表作为查询结果。

4. 输出查询结果

最后一步是输出查询结果,可以在控制台打印或者进行其他的处理。

int departmentId = 1; // 要查询的部门ID
List<Integer> allSubDepartmentIds = getAllSubDepartmentIds(departmentId);
System.out.println("部门 " + departmentId + " 的所有下属部门ID列表为:" + allSubDepartmentIds);

代码解释:

  • 在这个示例中