分享一个 java 树形工具 TreeUtil

发布时间 2023-10-18 00:35:52作者: havelearned

直接上代码



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":"操作成功"
}