递归查询部门树形结构数据

原理介绍:
1.先根据根部门0查询根部门下的部门列表。
2.然后遍历部门列表。
3.然后每个部门下都查询子部门以及当前部门下的人员(调用getChildren()方法)。
4.查询子方法是又将id作为父id,再次调用子方法本身(调用getChildren()方法),如此反复即可实现。

实现方法代码:

import com.alibaba.fastjson2.JSONArray;

import java.util.ArrayList;
import java.util.List;

public class demo {

    /**
     * 部门实体
     */
    public static class Dept {

        /**
         * 部门id
         */
        private String deptId;

        /**
         * 部门名称
         */
        private String name;

        /**
         * 父部门id
         */
        private String parentId;

        /**
         * 子部门
         */
        private JSONArray children = new JSONArray();

        public String getDeptId() {
            return deptId;
        }

        public void setDeptId(String deptId) {
            this.deptId = deptId;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getParentId() {
            return parentId;
        }

        public void setParentId(String parentId) {
            this.parentId = parentId;
        }

        public JSONArray getChildren() {
            return children;
        }

        public void setChildren(JSONArray children) {
            this.children = children;
        }
    }

    public static void main(String[] arg) {
        List<Dept> deptList = new ArrayList<>();
        //添加第一级
        Dept dept = new Dept();
        dept.setDeptId("1000");
        dept.setParentId("0");
        dept.setName("康复中心门诊");
        deptList.add(dept);

        Dept dept1 = new Dept();
        dept1.setDeptId("1001");
        dept1.setParentId("0");
        dept1.setName("妇产科");
        deptList.add(dept1);

        Dept dept2 = new Dept();
        dept2.setDeptId("1002");
        dept2.setParentId("0");
        dept2.setName("骨伤科");
        deptList.add(dept2);

        //添加第二级
        Dept dept3 = new Dept();
        dept3.setDeptId("10021");
        dept3.setParentId("1002");
        dept3.setName("颈肩腰腿痛专科门诊");
        deptList.add(dept3);

        Dept dept4 = new Dept();
        dept4.setDeptId("10022");
        dept4.setParentId("1002");
        dept4.setName("骨伤二科(康复六科)门诊");
        deptList.add(dept4);

        Dept dept5 = new Dept();
        dept5.setDeptId("10001");
        dept5.setParentId("1000");
        dept5.setName("肌骨疼痛康复门诊");
        deptList.add(dept5);

        Dept dept6 = new Dept();
        dept6.setDeptId("10002");
        dept6.setParentId("1000");
        dept6.setName("脑卒中康复门诊");
        deptList.add(dept6);

        //添加第三级
        Dept dept7 = new Dept();
        dept7.setDeptId("100021");
        dept7.setParentId("10002");
        dept7.setName("脑卒中康复门诊-小门诊");
        deptList.add(dept7);

        Dept dept8 = new Dept();
        dept8.setDeptId("100022");
        dept8.setParentId("10002");
        dept8.setName("脑卒中康复门诊-小门诊-小小门诊");
        deptList.add(dept8);

        JSONArray jsonArray = new JSONArray();
        for (Dept d : deptList) {
            //根据最外层部门的父id 查询最外层部门
            if ("0".equals(d.getParentId())) {
                Dept parentDept = new Dept();
                parentDept.setDeptId(d.getDeptId());
                parentDept.setParentId(d.getParentId());
                parentDept.setName(d.getName());
                parentDept.setChildren(getChildren(deptList, d.getDeptId()));
                jsonArray.add(parentDept);
            }
        }
        System.out.println("jsonArray----:" + jsonArray);
        System.out.println(jsonArray.size());
        //jsonArray----:[{"children":[{"children":[],"deptId":"10001","name":"肌骨疼痛康复门诊","parentId":"1000"},{"children":[{"children":[],"deptId":"100021","name":"脑卒中康复门诊-小门诊","parentId":"10002"},{"children":[],"deptId":"100022","name":"脑卒中康复门诊-小门诊-小小门诊","parentId":"10002"}],"deptId":"10002","name":"脑卒中康复门诊","parentId":"1000"}],"deptId":"1000","name":"康复中心门诊","parentId":"0"},{"children":[],"deptId":"1001","name":"妇产科","parentId":"0"},{"children":[{"children":[],"deptId":"10021","name":"颈肩腰腿痛专科门诊","parentId":"1002"},{"children":[],"deptId":"10022","name":"骨伤二科(康复六科)门诊","parentId":"1002"}],"deptId":"1002","name":"骨伤科","parentId":"0"}]
        //3
    }

    //递归查询子部门
    private static JSONArray getChildren(List<Dept> deptList, String deptId) {
        JSONArray jsonArray = new JSONArray();
        for (Dept d : deptList) {
            if (deptId.equals(d.getParentId())) {
                Dept chDept = new Dept();
                chDept.setDeptId(d.getDeptId());
                chDept.setParentId(d.getParentId());
                chDept.setName(d.getName());
                chDept.setChildren(getChildren(deptList, d.getDeptId()));
                jsonArray.add(chDept);
            }
        }
        return jsonArray;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值