使用hutool.core.lang.tree构建树状结构

本文介绍了如何使用Hutool库在Java项目中处理数据,从数据库查询目录信息,统计父节点子节点,然后将数据转换为树状结构以展示目录。作者详细展示了如何操作和配置TreeNode以实现所需功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目需要树状展示目录,hutool还是比较好用的,例子记录一下

// 从Dir_INFO表中查出所有的数据
        List<DirInfo> fileCategoryDOS = DirInfoRepository.findAll();
        // 统计父节点下子节点数量
        Map<String, Long> parentCount = fileCategoryDOS.stream().collect(Collectors.groupingBy(DirInfo::getCParentId, Collectors.counting()));
        // 构建node列表List<TreeNode<String>> nodeList = CollUtil.newArrayList();
        // 构建node列表
        List<TreeNode<String>> collect = fileCategoryDOS.stream().map(fileCategoryDO -> {
            //自定义返回属性
            Map<String, Object> map = new HashMap<>();
            //层级
            map.put("level", fileCategoryDO.getCDirLevel());
            //前端tree显示名称
            map.put("label", fileCategoryDO.getCDirName());
            //判断是否为叶子节点
            map.put("leaf", !parentCount.containsKey(fileCategoryDO.getCDirId()));
            //把tree显示需要的属性添加到TreeNode中
            TreeNode<String> treeNode = new TreeNode<String>().setId(fileCategoryDO.getCDirId())
                    .setName(fileCategoryDO.getCDirName())
                    .setParentId(fileCategoryDO.getCParentId())
                    .setWeight(fileCategoryDO.getCDirSort())
                    .setExtra(map);
            return treeNode;
        }).collect(Collectors.toList());

        //配置
        TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
        // 自定义属性名 都要默认值的
        treeNodeConfig.setWeightKey("orderNum");
        treeNodeConfig.setIdKey("id");
        treeNodeConfig.setChildrenKey("children");
        // 最大递归深度
        treeNodeConfig.setDeep(10);

        //转换器 转换成树状结构
        List<Tree<String>> treeNodes = TreeUtil.build(collect, "0", treeNodeConfig,
                (treeNode, tree) -> {
                    tree.setId(treeNode.getId());
                    tree.setParentId(treeNode.getParentId());
                    tree.setWeight(treeNode.getWeight());
                    tree.setName(treeNode.getName());
                    // 层级
                    tree.putExtra("level", treeNode.getExtra().getOrDefault("level", null));
                    // 是否叶子节点
                    tree.putExtra("leaf", treeNode.getExtra().getOrDefault("leaf", null));
                    // 目录名称
                    tree.putExtra("label", treeNode.getExtra().getOrDefault("label", null));
//                    tree.putExtra("gmt_create", treeNode.getExtra().getOrDefault("gmt_create", null));
                });
        return treeNodes;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值