分享一个 java 树形工具 TreeUtil
直接上代码
public interface TreeNode {
String getParentId();
String getCategoryId();
void editChildNodes(List<? extends TreeNode> childNodes);
}
public class TreeUtils<T> {
/**
* 递归设置树结构
*
* @param parentId 当前父类的ID
* @param records 所有的记录
* @return 树结构
*/
public static <T extends TreeNode> List<T> buildTree(String parentId, List<T> records) {
List<T> childNodes = new ArrayList<>();
for (T node : records) {
if (node.getParentId().equals(parentId)) {
List<T> subNodes = buildTree(node.getCategoryId(), records);
node.editChildNodes(subNodes);
childNodes.add(node);
}
}
return childNodes;
}
}
使用方式
分类 entity 实现 TreeNode
public class Categories implements TreeNode {
xxxxx字段
// 这个属性是必须的,毕竟是树形结构
List<Categories> chilendList;
@Override
public void editChildNodes(List<? extends TreeNode> childNodes) {
this.chilendList = (List<Categories>) childNodes;
}
从数据库从查询分页数据什么的,
筛选出顶级数据
List<Categories> records = page.getRecords();
// 顶级数据
List<Categories> parentList = records.stream().filter(item -> item.getParentId().equals("0")).toList();
for (Categories categories : parentList) {
categories.editChildNodes(TreeUtils.buildTree(categories.getCategoryId(), records));
}
//ok
return Result.ok(parentList);
预期结果:
{
"code":200,
"data":{
"current":1,
"optimizeCountSql":true,
"orders":[
],
"pages":1,
"records":[
{
"categoryId":"1709097924543758337",
"categoryName":"PDF书籍",
"chilendList":[
],
"createdTime":"2023-10-03 14:47:53",
"parentId":"0"
},
{
"categoryId":"1",
"categoryName":"电子产品",
"chilendList":[
{
"categoryId":"6",
"categoryName":"数码相机",
"chilendList":[
],
"createdTime":"2023-08-28 04:18:05",
"parentId":"1",
"updatedTime":"2023-08-28 04:18:05"
}
],
"createdTime":"2023-08-28 04:18:05",
"parentId":"0",
"updatedTime":"2023-08-28 04:18:05"
},
{
"categoryId":"2",
"categoryName":"家居用品",
"chilendList":[
{
"categoryId":"7",
"categoryName":"沙发",
"chilendList":[
],
"createdTime":"2023-08-28 04:18:05",
"parentId":"2",
"updatedTime":"2023-08-28 04:18:05"
}
],
"createdTime":"2023-08-28 04:18:05",
"parentId":"0",
"updatedTime":"2023-08-28 04:18:05"
},
{
"categoryId":"3",
"categoryName":"服装鞋帽",
"chilendList":[
{
"categoryId":"8",
"categoryName":"运动鞋",
"chilendList":[
],
"createdTime":"2023-08-28 04:18:05",
"parentId":"3",
"updatedTime":"2023-08-28 04:18:05"
}
],
"createdTime":"2023-08-28 04:18:05",
"parentId":"0",
"updatedTime":"2023-08-28 04:18:05"
},
{
"categoryId":"4",
"categoryName":"食品饮料",
"chilendList":[
{
"categoryId":"9",
"categoryName":"巧克力",
"chilendList":[
],
"createdTime":"2023-08-28 04:18:05",
"parentId":"4",
"updatedTime":"2023-08-28 04:18:05"
}
],
"createdTime":"2023-08-28 04:18:05",
"parentId":"0",
"updatedTime":"2023-08-28 04:18:05"
}
],
"searchCount":true,
"size":1000,
"total":11
},
"flag":true,
"message":"操作成功"
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步