-->

java递归返回树形数据结构

近期项目有个需求,需要将组织机构数据拼成树型结构返回至前端。我的做法如下

方式一、使用递归方式实现

    private List<SysDept> getSysDepts(String deptId) {
        // 1、获取表中所有数据 (自行根据实际场景拿到所有表数据)
        List<SysDept> all = getAllDept();
        // 3、返回的结果集
        List<SysDept> tree = new ArrayList<>();
        // 4、获取到最外层的部门信息
        List<SysDept> parentSysDept = all.stream().filter(dept -> dept.getDeptId().equals(deptId)).collect(Collectors.toList());
        if (CollectionUtils.isNotEmpty(parentSysDept)){
            // 5、取出部门信息
            SysDept dept = parentSysDept.get(0);
            // 6、放入集合中
            tree.add(dept);
            // 7、添加子节点
            addChildDept(dept, all);
        }
        return tree;
    }
    private void addChildDept(SysDept sysDept, List<SysDept> all) {
        // 1、拿到所传部门的字部门列表
        List<SysDept> tempList = all.stream()
                .filter(dept -> sysDept.getDeptId().equals(dept.getParentId()))
                .collect(Collectors.toList());
        sysDept.setChildren(tempList);
        tempList.forEach(dept -> {
            2、添加子节点
            addChildDept(dept, all);
        });
    }

效果展示:

 

方式二、利用Hutool工具进行实现

    private List<Tree<String>> getSysDepts(String deptId) {
        // 获取所有数据
        List<SysDept> all = getAllDept();
        //配置
        TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
        // 自定义属性名 都要默认值的
        treeNodeConfig.setIdKey("deptId");
        // 最大递归深度
        treeNodeConfig.setDeep(4);

        //转换器 (这里参数的deptId,指的是最外层的deptId值)
        List<Tree<String>> treeNodes = TreeUtil.build(all, deptId, treeNodeConfig,
                (treeNode, tree) -> {
                    tree.setParentId(treeNode.getParentId());
                    // 扩展属性 ...(可以自行设置需要返回的字段)
                    tree.putExtra("deptId", treeNode.getDeptId());
                    tree.putExtra("status", treeNode.getStatus());
                });
        return treeNodes;
    }

效果展示:

 

 

posted @   角刀牛Java  阅读(1322)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示