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

原理介绍:

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

代码:

import com.alibaba.fastjson2.JSONArray;

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

class demo {

    //实体
    public static class KsB
    {
        private String code;        //id

        private String idParent;    //父id

        private String name;        //部门名称

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

        public String getName() {
            return name;
        }

        public JSONArray getChildren() {
            return children;
        }

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

        public void setCode(String code)
        {
            this.code = code;
        }

        public String getCode()
        {
            return code;
        }

        public void setIdParent(String idParent)
        {
            this.idParent = idParent;
        }

        public String getIdParent()
        {
            return idParent;
        }

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

        @Override
        public String toString() {
            return "KsB{" +
                    "code='" + code + '\'' +
                    ", idParent='" + idParent + '\'' +
                    ", name='" + name + '\'' +
                    ", children=" + children +
                    '}';
        }
    }

    public static void main(String [] arg){
        List<KsB> ksBList = new ArrayList<>();
        //添加第一级
        KsB ksB = new KsB();
        ksB.setCode("1000");
        ksB.setIdParent("0");
        ksB.setName("康复中心门诊");
        ksBList.add(ksB);

        KsB ksB1 = new KsB();
        ksB1.setCode("1001");
        ksB1.setIdParent("0");
        ksB1.setName("妇产科");
        ksBList.add(ksB1);

        KsB ksB2 = new KsB();
        ksB2.setCode("1002");
        ksB2.setIdParent("0");
        ksB2.setName("骨伤科");
        ksBList.add(ksB2);

        //添加第二级
        KsB ksB3 = new KsB();
        ksB3.setCode("10021");
        ksB3.setIdParent("1002");
        ksB3.setName("颈肩腰腿痛专科门诊");
        ksBList.add(ksB3);

        KsB ksB4 = new KsB();
        ksB4.setCode("10022");
        ksB4.setIdParent("1002");
        ksB4.setName("骨伤二科(康复六科)门诊");
        ksBList.add(ksB4);

        KsB ksB5 = new KsB();
        ksB5.setCode("10001");
        ksB5.setIdParent("1000");
        ksB5.setName("肌骨疼痛康复门诊");
        ksBList.add(ksB5);

        KsB ksB6 = new KsB();
        ksB6.setCode("10002");
        ksB6.setIdParent("1000");
        ksB6.setName("脑卒中康复门诊");
        ksBList.add(ksB6);

        //添加第三级
        KsB ksB7 = new KsB();
        ksB7.setCode("100021");
        ksB7.setIdParent("10002");
        ksB7.setName("脑卒中康复门诊-小门诊");
        ksBList.add(ksB7);

        KsB ksB8 = new KsB();
        ksB8.setCode("100022");
        ksB8.setIdParent("10002");
        ksB8.setName("脑卒中康复门诊-小门诊-小小门诊");
        ksBList.add(ksB8);

        JSONArray jsonArray = new JSONArray();
        for (KsB b : ksBList) {
            //根据最外层部门的父id 查询最外层部门
            if ("0".equals(b.getIdParent())){
                KsB parentKsb = new KsB();
                parentKsb.setCode(b.getCode());
                parentKsb.setIdParent(b.getIdParent());
                parentKsb.setName(b.getName());
                parentKsb.setChildren(getChildren(ksBList,b.getCode()));
                jsonArray.add(parentKsb);
            }
        }
        System.out.println("jsonArray----:"+jsonArray);
    }

    //递归查询子部门
    public static JSONArray getChildren(List<KsB> list,String code){
        JSONArray jsonArray = new JSONArray();
        for (KsB b : list) {
            if (code.equals(b.getIdParent())){
                KsB chKsb = new KsB();
                chKsb.setCode(b.getCode());
                chKsb.setIdParent(b.getIdParent());
                chKsb.setName(b.getName());
                chKsb.setChildren(getChildren(list,b.getCode()));
                jsonArray.add(chKsb);
            }
        }
        return jsonArray;
    }

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/** * 根据等级查询类目 * * @param level * @return */ @Override public List queryCategoryTree(Integer level) { //查询当前级别下类目 List list = categoryDAO.list(level); //组装好的类目,返回前端 List categoryTree = new ArrayList(); //所有类目 List allDTOList = new ArrayList(); if (CollectionUtils.isEmpty(list)) { return categoryTree; } for (CategoryDO categoryDO : list) { allDTOList.add(new CategoryTreeDTO().convertDOToDTO(categoryDO)); } //当前等级类目 categoryTree = allDTOList.stream().filter(dto -> level.equals(dto.getLevel())).collect(Collectors.toList()); for (CategoryTreeDTO categoryTreeDTO : categoryTree) { //组装类目为结构 assembleTree(categoryTreeDTO, allDTOList,Constants.CATEGORY_MAX_LEVEL - level); } return categoryTree; } /** * 组装 * * @param categoryTreeDTO * @param allList * @param remainRecursionCount 剩余递归次数 * @return */ public CategoryTreeDTO assembleTree(CategoryTreeDTO categoryTreeDTO, List allList, int remainRecursionCount) { remainRecursionCount--; //最大递归次数不超过Constants.CATEGORY_MAX_LEVEL-level次,防止坏数据死循环 if(remainRecursionCount < 0){ return categoryTreeDTO; } String categoryCode = categoryTreeDTO.getCategoryCode(); Integer level = categoryTreeDTO.getLevel(); //到达最后等级返回 if (Constants.CATEGORY_MAX_LEVEL == level) { return categoryTreeDTO; } //子类目 List child = allList.stream().filter(a -> categoryCode.equals(a.getParentCode())).collect(Collectors.toList()); if (null == child) { return categoryTreeDTO; } categoryTreeDTO.setChildren(child); //组装子类目 for (CategoryTreeDTO dto : child) { assembleTree(dto, allList,remainRecursionCount); } return categoryTreeDTO; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值