树结构工具-TreeUtil
部门树菜单树是日常开发中必不可少需要的.由于一般这种结构需要运行无限嵌套下级,所以查询时需要使用递归算法来构建数据结构,对于逻辑较弱的小伙伴极其不友好.
递归算法写法 :
java 关于菜单树,部门树,递归算法(两种)_kevinChen2018的博客-CSDN博客_java菜单递归算法
最近发现hutool竟然有这种api,可以大大的缩减开发的时间,于是研究了一下分享下基础用法.
首先需要数据,一般这种数据结构需要一个字段parentId就是上级id.
数据库设计 :
使用TreeUtil前先引入 hutool 的maven
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.20</version>
</dependency>
注意使用前必须确认数据正确,没有类似 parentId等于1 id也是等于1 这种数据,否则treeUtil会构建数据无效
//查询所有数据
List<OrganizationDepartment> departments = deptService.selectALL();
TreeNodeConfig config = new TreeNodeConfig();
//config可以配置属性字段名和排序等等
//config.setParentIdKey("parentId");
//config.setDeep(20);//最大递归深度 默认无限制
List<Tree<Integer>> treeNodes = TreeUtil.build(departments, 0, config, (object, tree) -> {
tree.setId(object.getId());//必填属性
tree.setParentId(object.getParentId());//必填属性
tree.setName(object.getName());
tree.setWeight(object.getIndex());//更新一波,weight为排序字段,不过测试时子级好像并没有生效
// 扩展属性 ...
//tree.putExtra("children",object.getChildren());
});
log.println(JSONUtil.toJsonStr(treeNodes));
}
最终数据结构