新浪新闻客户端

【编程】给定一个部门,遍历出当前部门下所有子部门包含当前部门

【编程】给定一个部门,遍历出当前部门下所有子部门包含当前部门
2022年11月17日 09:38 新浪网 作者 凯哥Java
缩小字体 放大字体 收藏 微博 微信 0

  给定一个部门,打印出当前部门及其子部门:

  

  思路分析:

  1:可能当前部门没有子部门,如果这种情况,直接返回当前部门;

  2:如果当前部门包含了子部门,就需要使用递归一层一层的查找;

  3:在递归的时候,因为是一层一层的,所以,可能在第二层的时候,已经添加了。在进行第三成的时候,可能为空了。需要去重。如下图:

  

  完整代码:

  public class AllDepartment {    public static void main(String[] args) {        AllDepartment allDepartment = new AllDepartment();        List

  list = allDepartment.initDepartment();        Department d1 = new Department();        d1.setParentId(0);        d1.setId(1);        d1.setName("技术部");        List

  myList = allDepartment.getMyAllDepartmentList(d1, list);        myList.forEach(System.out::println);    }    private List

  getMyAllDepartmentList(Department d1, List

  list) {        List

  result = new ArrayList();        Integer myId = d1.getId();        List

  mySonDepartment = list.stream().filter(d -> d.getParentId().equals(myId)).collect(Collectors.toList());        result.add(d1);        if (mySonDepartment.isEmpty()) {            return result;        }        getSon(list, d1, result);        return result;    }    private void getSon(List

  list, Department d1, List

  result) {        Integer myId = d1.getId();        List

  mySonDepartment = list.stream().filter(d -> d.getParentId().equals(myId)).collect(Collectors.toList());        if (mySonDepartment.isEmpty() && !result.contains(d1)) {            result.add(d1);        } else {            for (Department sonDdepartment : mySonDepartment) {                result.add(sonDdepartment);                getSon(list, sonDdepartment, result);            }        }    }    private List

  initDepartment() {        List

  list = new ArrayList();        Department d1 = new Department();        d1.setParentId(0);        d1.setId(1);        d1.setName("技术部");        Department d2 = new Department();        d2.setParentId(0);        d2.setId(2);        d2.setName("人事部");        Department d3 = new Department();        d3.setParentId(0);        d3.setId(3);        d3.setName("财务部");        Department d4 = new Department();        d4.setParentId(1);        d4.setId(4);        d4.setName("大前端");        Department d5 = new Department();        d5.setParentId(1);        d5.setId(5);        d5.setName("后端");        Department d6 = new Department();        d6.setParentId(1);        d6.setId(6);        d6.setName("产品");        Department d7 = new Department();        d7.setParentId(5);        d7.setId(7);        d7.setName("Java");        Department d8 = new Department();        d8.setParentId(5);        d8.setId(8);        d8.setName("PHP");        Department d9 = new Department();        d9.setParentId(5);        d9.setId(9);        d9.setName("大数据");        Department d10 = new Department();        d10.setParentId(7);        d10.setId(10);        d10.setName("高级Java");        Department d11 = new Department();        d11.setParentId(9);        d11.setId(11);        d11.setName("大屏幕");        Department d12 = new Department();        d12.setParentId(4);        d12.setId(12);        d12.setName("IOS");        Department d13 = new Department();        d13.setParentId(2);        d13.setId(13);        d13.setName("HRBP");        list.add(d1);        list.add(d2);        list.add(d3);        list.add(d4);        list.add(d5);        list.add(d6);        list.add(d7);        list.add(d8);        list.add(d9);        list.add(d10);        list.add(d11);        list.add(d12);        list.add(d13);        return list;    }}@Dataclass Department {    private Integer parentId;    private Integer id;    private String name;}

  运行结果:

  

  符合预期结果。

  需要注意:

  在递归的时候,for循环代码中:

  result.add(sonDdepartment);

  这一行不能少。如果少了这一样,最终运行的结果就是最后一层的。不会包括其他层的

  

特别声明:以上文章内容仅代表作者本人观点,不代表新浪网观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与新浪网联系。
遍历 部门 编程 递归 技术部
来自于:北京
权利保护声明页/Notice to Right Holders
阅读排行榜 评论排行榜
  • 01 布林肯当面提要求,内塔尼亚胡拒了
  • 02 法媒:苹果销量下滑,库克今年二度访华
  • 03 以军发声明:哈希姆·萨菲丁已死亡
  • 04 普京签署总统令:授予“首位美国政治难民”俄罗斯国籍
  • 05 习近平同俄罗斯总统普京举行会晤

图片新闻

南京迎大雾天气 城市建筑若隐若现 南京迎大雾天气 城市建筑若隐若现
霜降抢秋 田间地头农机轰鸣 霜降抢秋 田间地头农机轰鸣
霜降节气 植物披霜衣 霜降节气 植物披霜衣
神舟十九号船箭组合体转运至发射区 神舟十九号船箭组合体转运至发射区
视频新闻
“宇宙地图”公布 “宇宙地图”公布
海军潜水考核超燃现场 海军潜水考核超燃现场
泰山上的“机器狗”刷屏 泰山上的“机器狗”刷屏
官方回应武汉下水道冒白烟 官方回应武汉下水道冒白烟

新媒体实验室

  • 朋友圈47%的内容在炫耀 朋友圈47%的内容在炫耀
  • 近300起杀妻案如何判罚 近300起杀妻案如何判罚
  • 谈恋爱反降低生活质量? 谈恋爱反降低生活质量?
  • 全国最能吃的省市竟是它 全国最能吃的省市竟是它
  • 性犯罪者再犯几率达12.8% 性犯罪者再犯几率达12.8%

    举报邮箱:jubao@vip.sina.com

    Copyright © 1996-2024 SINA Corporation

    All Rights Reserved 新浪公司 版权所有