项目中经常会遇到各种需要以树形结构展示的功能,如菜单树、分类树、部门树,
Hutool的TreeUtil主要是用来快速构造树形结构,以及获取所有叶子节点等操作。
步骤:
1️⃣ 引入hutool最新pom包。
2️⃣ 获取构造树的分类数据。
3️⃣ TreeNodeConfig信息配置,配置节点名称、孩子节点key信息、排序等等。
4️⃣ 调用TreeUtil.build()构造树。
pom依赖
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.22</version>
</dependency>
资料分类Service接口层
/**
* 构造班型资料分类树方法
*
* @author: jacklin
* @date: 2022/4/20 16:44
**/
List<Tree<String>> constructTree();
实现层
@Override
public List<Tree<String>> constructTree() {
//1.获取所有资料分类
List<SdSchoolClassTypeDataCategory> dataList = this.lambdaQuery().getBaseMapper().selectList(Wrappers.lambdaQuery(SdSchoolClassTypeDataCategory.class)
.eq(SdSchoolClassTypeDataCategory::getStatus, SchoolConstant.ENABLE_STATUS)
.eq(SdSchoolClassTypeDataCategory::getDeleted, SchoolConstant.DELETE_STATUS_NORMAL));
//2.配置
TreeNodeConfig config = new TreeNodeConfig();
config.setIdKey("id"); //默认id,可以不设置
config.setParentIdKey("pid"); //父id
config.setNameKey("dataCategoryName"); //分类名称
config.setDeep(3); //最大递归深度
config.setChildrenKey("childrenList"); //孩子节点
config.setWeightKey("sort"); //排序字段
//3.转树
List<Tree<String>> treeList = TreeUtil.build(dataList, "0", config, ((object, treeNode) -> {
treeNode.putExtra("id", object.getId());
treeNode.putExtra("pid", object.getPid());
treeNode.putExtra("dataCategoryName", object.getDataCategoryName());
treeNode.putExtra("level", object.getLevel());
treeNode.putExtra("sort", object.getSort());
//扩展属性...
}));
return treeList;
}
😀通过TreeNodeConfig我们可以自定义节点的名称、关系节点id名称,这样就可以和不同的数据库做对应。
controller
/**
* 获取构造树
*
* @author: jacklin
* @date: 2022/4/20 17:18
**/
@ApiOperation(value = "获取构造树", notes = "获取构造树")
@GetMapping(value = "/getConstructTree")
public Result<?> getConstructTree() {
List<Tree<String>> treeList = sdSchoolClassTypeDataCategoryService.constructTree();
return Result.OK(treeList);
}
响应内容
{
"success":true,
"message":"操作成功!",
"code":200,
"result":[
{
"id":"1447031605584797698",
"pid":"0",
"dataCategoryName":"开发测试资料一级分类",
"level":1,
"sort":1,
"childrenList":[
{
"id":"1447031722601684993",
"pid":"1447031605584797698",
"dataCategoryName":"开发测试资料二级分类",
"level":2,
"sort":1,
"childrenList":[
{
"id":"1516684508672299010",
"pid":"1447031722601684993",
"dataCategoryName":"开发测试资料三级分类",
"level":3,
"sort":1
}
]
}
]
},
{
"id":"1447849327826636801",
"pid":"0",
"dataCategoryName":"测试资料分类",
"level":1,
"sort":1,
"childrenList":[
{
"id":"1447849471787732993",
"pid":"1447849327826636801",
"dataCategoryName":"测试资料分类2-1",
"level":2,
"sort":1
},
{
"id":"1447849472085528577",
"pid":"1447849327826636801",
"dataCategoryName":"测试资料分类2-2",
"level":2,
"sort":1
},
{
"id":"1447849472219746305",
"pid":"1447849327826636801",
"dataCategoryName":"测试资料分类2-3",
"level":2,
"sort":1
}
]
}
]
}
更多了解可以参考Hutool官方说明:www.hutool.cn/docs/#/core…