1、样例
public class DepartmentService { public static void main(String[] args) { Map<String, Dept> deptMap = new HashMap<>(); deptMap.put("研发部", new Dept("研发部", "A公司")); deptMap.put("财务部", new Dept("财务部", "A公司")); deptMap.put("销售部", new Dept("销售部", "A公司")); deptMap.put("大数据产品线", new Dept("大数据产品线", "研发部")); deptMap.put("大数据开发工程师", new Dept("大数据开发工程师", "大数据产品线")); deptMap.put("硬件产品线", new Dept("硬件产品线", "研发部")); deptMap.put("游戏产品线", new Dept("游戏产品线", "研发部")); deptMap.put("数仓组", new Dept("数仓组", "大数据产品线")); deptMap.put("算法组", new Dept("算法组", "大数据产品线")); deptMap.put("算法工程师", new Dept("算法工程师", "算法组")); deptMap.put("模型组", new Dept("模型组", "游戏产品线")); deptMap.put("美工组", new Dept("美工组", "游戏产品线")); List<Dept> subDepts = getSubDepartments("研发部", deptMap); for (Dept dept : subDepts) { System.out.println(dept); } } /** * 递归获取子部门及其所有子级部门 * * @param deptId 当前部门ID * @return 子部门集合 */ public static List<Dept> getSubDepartments(String deptId, Map<String, Dept> deptMap) { List<Dept> subDepts = new ArrayList<>(); for (Dept dept : deptMap.values()) { if (dept.getParentDeptId().equals(deptId)) { subDepts.add(dept); // 递归调用,继续查找子部门的子部门 subDepts.addAll(getSubDepartments(dept.getDeptId(), deptMap)); } } return subDepts; } } class Dept { private String deptId; private String parentDeptId; public Dept(String deptId, String parentDeptId) { this.deptId = deptId; this.parentDeptId = parentDeptId; } public String getDeptId() { return deptId; } public String getParentDeptId() { return parentDeptId; } @Override public String toString() { return "Dept{" + "deptId='" + deptId + '\'' + ", parentDeptId='" + parentDeptId + '\'' + '}'; } }
朝菌不知晦朔,蟪蛄不知春秋