java展示树形结构的两种方式

1、普通写法【第一个参数是顶级的parentid,第二个参数是数据列表】

 /**
     * 递归获取子节点下的子节点
     * @param integer 父节点的ID
     * @param treesList 所有菜单树集合
     * @return
     */
    private List<DepartmentInfoVo> getChildrenNode(String integer, List<DepartmentInfoVo> treesList) {

        List<DepartmentInfoVo> newTrees = new ArrayList<>();
        for (DepartmentInfoVo department : treesList) {
            if (StrUtil.isBlank(department.getDepartmentParentId())) {
                continue;
            }
            if (integer.equals(department.getDepartmentParentId())) {
                // 递归获取子节点下的子节点,即设置树控件中的children
                department.setChildren(getChildrenNode(department.getDepartmentId(), treesList));
                newTrees.add(department);
            }
        }
        return newTrees;
    }

2、hutool

 <!-- hutool工具 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.2</version>
        </dependency>
 //配置
        TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
        // 自定义属性名 都要默认值的
        treeNodeConfig.setWeightKey("menuSort");
        treeNodeConfig.setIdKey("menuId");
        treeNodeConfig.setParentIdKey("menuParentid");
        // 最大递归深度
        treeNodeConfig.setDeep(Convert.toInt(appMenuSelectDto.getMenuDepth()));

        //转换器
        List<Tree<String>> treeNodes = TreeUtil.build(appMenuList, "0", treeNodeConfig,
                (treeNode, tree) -> {
                    tree.setId(treeNode.getMenuId());
                    tree.setParentId(treeNode.getMenuParentid());
                    tree.setWeight(treeNode.getMenuSort());
                    tree.setName(treeNode.getMenuName());
                    // 扩展属性 ...
                    tree.putExtra("value", treeNode.getMenuName());
                    tree.putExtra("label", treeNode.getMenuId());
        });

 两种写法出来效果一样

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值