使用递归获取树列表

哈哈哈,有点惭愧,工作三年才体会到递归的真髓,也是以前经验不到家,想不明白,哈哈哈哈。

今天的例子以三级列表为主~

主要思路:要找出所有父亲里的每个父亲下的所有儿子,并将儿子赋值给自己父亲的儿子名下 , 但儿子也会有自己的儿子,也要将找出来的儿子赋值儿子的儿子名下~

做法:先到一个有全部人的圈子里将所有身份为父亲找出来,再把找出来的身份为父亲的人与全部的圈子里的身份为儿子比较( 比较方式:根据父亲的身份证与儿子的父亲身份证比对),满足条件再将儿子赋值到父亲的儿子名下~~~是不是很简单~~~~

看看代码,更加一目了然~~

   public List<EmrModleVo> queryEmrModleList() {
        // 1 获取所有数据
        List<EmrModleVo> allList = this.baseMapper.queryEmrModleList();
        // 2 获取父亲列表
        List<EmrModleVo> parentList = getParentList(allList);
        // 3 获取父亲下的所有儿子的父亲列表
        List<EmrModleVo> childrenList = getChildrenList(allList, parentList);
        return childrenList;
    }


    // 获取父亲列表
    private List<EmrModleVo> getParentList(List<EmrModleVo> allList){
        List<EmrModleVo> parentList = new ArrayList<EmrModleVo>();
        allList.forEach(emrModleVo -> {
            if(emrModleVo.getParentId() == 0){
                parentList.add(emrModleVo);
            }
        });
        return parentList;
    }
    
    // 获取父亲下的所有儿子的父亲列表
    private List<EmrModleVo> getChildrenList(List<EmrModleVo> allList,List<EmrModleVo> parentList){
        parentList.forEach(oneEmrModleVo -> {
            List<EmrModleVo> childrenList = new ArrayList<EmrModleVo>();
            allList.forEach(allEmrModleVo -> {
                if(oneEmrModleVo.getId().equals(allEmrModleVo.getParentId())){
                    childrenList.add(allEmrModleVo);
                }
            });
            oneEmrModleVo.setChildren(getChildrenList(allList,childrenList));
        });
        return parentList;
    }

数据库结构如下:

求出来的集合如下:

{
    "code": 0,
    "msg": "操作成功",
    "data": [
        {
            "id": "1",
            "parentId": "0",
            "modleFlag": "1",
            "modleName": "查询条件模板列表",
            "effeTime": "2121-06-06T16:00:00.000+00:00",
            "selectFlag": 0,
            "effective": 1,
            "modleSort": 0,
            "children": [
                {
                    "id": "3",
                    "parentId": "1",
                    "modleFlag": "1",
                    "modleName": "查询默认模板",
                    "effeTime": "2121-06-06T16:00:00.000+00:00",
                    "selectFlag": 1,
                    "effective": 1,
                    "modleSort": 1,
                    "children": [
                        {
                            "id": "5",
                            "parentId": "3",
                            "modleFlag": "1",
                            "modleName": "查询",
                            "effeTime": "2121-06-06T16:00:00.000+00:00",
                            "selectFlag": 0,
                            "effective": 1,
                            "modleSort": 2,
                            "children": []
                        }
                    ]
                }
            ]
        },
        {
            "id": "2",
            "parentId": "0",
            "modleFlag": "2",
            "modleName": "表头显示模板列表",
            "effeTime": "2121-06-06T16:00:00.000+00:00",
            "selectFlag": 0,
            "effective": 1,
            "modleSort": 0,
            "children": [
                {
                    "id": "4",
                    "parentId": "2",
                    "modleFlag": "2",
                    "modleName": "表头默认模板",
                    "effeTime": "2121-06-06T16:00:00.000+00:00",
                    "selectFlag": 1,
                    "effective": 1,
                    "modleSort": 1,
                    "children": [
                        {
                            "id": "6",
                            "parentId": "4",
                            "modleFlag": "2",
                            "modleName": "表头",
                            "effeTime": "2121-06-06T16:00:00.000+00:00",
                            "selectFlag": 0,
                            "effective": 1,
                            "modleSort": 2,
                            "children": []
                        }
                    ]
                }
            ]
        }
    ]
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值