JAVA常用的展示树形结构的两种方式

129 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

前言

树形结构一般用于无限分级表中,常用的场景是展示角色权限这块

普通写法

 /**
     * 递归获取子节点下的子节点
     * @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;
    }
    

hutool方式

<!-- maven引入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());
 });

两种写法出来效果一样

image.png