树形数据组装最简单的方法-Java

开发中我们经常遇到分类设计,除了表设计复杂之外,其数据组装也较为复杂

方法并不是原创,看了别的代码才有的思路,

要看懂以下代码需掌握java 8的stream和Lambda 表达式

组装有很多种方法,下面介绍一种我认为最简单的,但并不是最好理解的方法,

1、有如下表结构

比如这种常见可扩展的分类

又比如这种复杂的十级分类

2、后端如何组装呢?

2.1、以三级分类为例

2.2、第一步:数据可查出所有数据

 // 1、查询所有数据->走数据库
 List<PmsCategory> alldata = categorService.query(page, data);
 // 2、modal 中加入List<PmsCategory> 以及其getter、setter
 // 子分类
 private List<PmsCategory> child;

2.3、利用强大的stream流进行处理

    public List<PmsCategory> queryListTree(){
        // 1、1、查询所有数据->走数据库
         List<PmsCategory> pmsCategories = categoryDao.selectByExample(pmsCategoryAll);
        // 2、找到一级分类 判断条件是parentCid == 0 或者level ==1
        List<PmsCategory> collect = alldata.stream().filter((category) -> {
            return category.getParentCid() == 0;
        }).map((meun) -> {
            //2、调用查询子数据
            meun.setChild(child(meun,alldata));
            return meun;
        }).sorted((menu1,meun2) ->{
            // 排序可自定义
            return (menu1.getSort() == null?0:menu1.getSort()) - (meun2.getSort() == null?0:meun2.getSort());
        }).collect(Collectors.toList());

        return collect;

    }
    private List<PmsCategory> child(PmsCategory root,List<PmsCategory> pmsCategories){
        List<PmsCategory> collect = pmsCategories.stream().filter((category) -> {
            return category.getParentCid().equals(root.getCatId());
        }).map((category) -> {
            // 找到子数据,注意这里式递归查找,子集有可能还有子集
            category.setChild(child(category, pmsCategories));
            return category;
        }).sorted((menu1, menu2) -> {
            // 也可以子那个规则排序
            return (menu1.getSort() == null?0:menu1.getSort()) - (menu2.getSort() == null?0:menu2.getSort());
        }).collect(Collectors.toList());
        return collect;
    }

3、清求测试

3.1、可以看到请求回来的数据就是我们想要的结构,父级里面嵌套子集

{
    "riestcode": 0,
    "riestmsg": "success",
    "retdata": {
		"datalist": [
            {
                "catId": 2,
                "name": "手机",
                "parentCid": 0,
                "catLevel": 1,
                "showStatus": 1,
                "sort": 0,
                "icon": null,
                "productUnit": null,
                "productCount": 0,
                "child": [
                    {
                        "catId": 34,
                        "name": "手机通讯",
                        "parentCid": 2,
                        "catLevel": 2,
                        "showStatus": 1,
                        "sort": 0,
                        "icon": null,
                        "productUnit": null,
                        "productCount": 0,
                        "child": [
                            {
                                "catId": 226,
                                "name": "对讲机",
                                "parentCid": 34,
                                "catLevel": 3,
                                "showStatus": 1,
                                "sort": 0,
                                "icon": null,
                                "productUnit": null,
                                "productCount": 0,
                                "child": [],
                                "catidlists": null
                            },
                            {
                                "catId": 1437,
                                "name": "1226测试",
                                "parentCid": 34,
                                "catLevel": 3,
                                "showStatus": 1,
                                "sort": null,
                                "icon": "xxx",
                                "productUnit": "件",
                                "productCount": null,
                                "child": [],
                                "catidlists": null
                            },
                            {
                                "catId": 1438,
                                "name": "1226测试-03",
                                "parentCid": 34,
                                "catLevel": 3,
                                "showStatus": 1,
                                "sort": null,
                                "icon": "xxx",
                                "productUnit": "件",
                                "productCount": null,
                                "child": [],
                                "catidlists": null
                            },
                            {
                                "catId": 1439,
                                "name": "1226测试",
                                "parentCid": 34,
                                "catLevel": 3,
                                "showStatus": 1,
                                "sort": null,
                                "icon": "xxx",
                                "productUnit": "件",
                                "productCount": null,
                                "child": [],
                                "catidlists": null
                            }
                        ],
                    }
            }

以上就是对树形数据的组装思路。

posted @ 2021-01-01 21:31  一个努力的人QAQ  阅读(729)  评论(0编辑  收藏  举报