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 @   JamieChyi  阅读(554)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示