Java递归生成树

一、创建表文件

 

二、造一些数据

 

注意:根节点的pid=0,其他节点的pid跟id是有对应的父子关系的。pid是父级id,代表他的子级

三、 我将实际过程中的查询和生成递归树的代码写在下面,实际开发过程中只需要改变他的实体类名

//    查询全部
    @GetMapping("/list")
    public Result list(){
        List<Category> categories = categoryService.list();
        return Result.success(categories);
    }
    //    查询全部,用于添加图书时的查询全部分类数据
    @GetMapping("/tree")
    public Result tree(){
        List<Category> list = categoryService.list();

//          对list进行操作
//        List<Category> treeList = list.stream().filter(v -> v.getPid() == null).collect(Collectors.toList());//第一层数据
        return Result.success(createTree(null,list));//null 表示从第一级开始递归
    }
    /**
     * 递归生成菜单树,完全递归的方法来实现递归树
     */
    private List<Category> createTree(Integer pid, List<Category> categories) {
        List<Category> treeList = new ArrayList<>();
        for (Category category : categories) {
            if(pid==null){
                if(category.getPid()==null){    //那这就是第一级节点
                    treeList.add(category);
                    category.setChildren(createTree(category.getId(), categories));
                }
            }else{
                if (pid.equals(category.getPid())) {
                    treeList.add(category);
                    category.setChildren(createTree(category.getId(), categories));
                }
            }
//            当children为[]的时候,将他设置成null
            if(CollUtil.isEmpty(category.getChildren())){
                category.setChildren(null);
            }
        }
        return treeList;
    }

四、最后数据格式

{
    "code": "200",
    "data": [
        {
            "id": 9,
            "name": "科技",
            "remark": "科技",
            "pid": null,
            "createtime": "2023-02-01",
            "updatetime": null,
            "children": [
                {
                    "id": 11,
                    "name": "生物科技",
                    "remark": "生物科技",
                    "pid": 9,
                    "createtime": "2023-02-01",
                    "updatetime": null,
                    "children": null
                },
                {
                    "id": 10,
                    "name": "高分子科技",
                    "remark": "高分子科技",
                    "pid": 9,
                    "createtime": "2023-02-01",
                    "updatetime": null,
                    "children": null
                }
            ]
        },
        {
            "id": 2,
            "name": "历史文化",
            "remark": "历史文化1",
            "pid": null,
            "createtime": "2023-01-30",
            "updatetime": "2023-01-30",
            "children": [
                {
                    "id": 12,
                    "name": "汉朝文化",
                    "remark": "汉朝文化",
                    "pid": 2,
                    "createtime": "2023-02-01",
                    "updatetime": null,
                    "children": null
                },
                {
                    "id": 8,
                    "name": "宋朝文化",
                    "remark": "宋朝文化",
                    "pid": 2,
                    "createtime": "2023-02-01",
                    "updatetime": null,
                    "children": null
                },
                {
                    "id": 7,
                    "name": "现代文化",
                    "remark": "现代文化",
                    "pid": 2,
                    "createtime": "2023-02-01",
                    "updatetime": null,
                    "children": null
                },
                {
                    "id": 3,
                    "name": "唐朝文化",
                    "remark": "唐朝文化",
                    "pid": 2,
                    "createtime": "2023-02-01",
                    "updatetime": null,
                    "children": null
                }
            ]
        }
    ],
    "msg": null
}


版权声明:本文为qq_54601164原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。