树形结构数据组装,开启链式编程注解

组建树形结构

1. 以三级分类为例

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

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

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;
    }

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

{
    "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
                            }
                        ],
                    }
            }

以上是我效仿的例子,下面是我的代码

  @Override
    public IPage<FDynamicCostVO> detailAll(FDynamicCostQO qo) {
        IPage<FDynamicCostVO> list = fDynamicCostMapper.detailAll(qo.buildPage(), qo);
        List<FDynamicCostVO> records = list.getRecords();
        //组装树形结构
        List<FDynamicCostVO> collect = records.stream()
                .filter(e -> e.getNodeNum() == 1)
                .map(a -> a.setChildList(child(a, records))) //这里需要注意,直接set会报错
                .collect(Collectors.toList());
        list.setRecords(collect);
        return list;
    }

直接set会报错,因为set的返回值是void,而map需要一个返回值

在这里插入图片描述

这个时候需要一个注解的帮助,@Accessors(chain = true)

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/cf9fa87880f94365902ebeaa319430e5.png
在这里插入图片描述

@Accessors(chain = true) //开启链式编程,setter方法返回的是this(也就是对象自己),代替了默认的返回值void
否则像上面的方式return一下也可以

{
                "id":"1745330167158247426",
                "createId":70551,
                "createTime":"2024-01-11 14:21:53",
                "updateTime":"2024-01-11 14:22:46",
                "dataStatus":1,
                "companyName":null,
                "projectName":"yy1221-1项目名称",
                "companyCode":"CC19-0018",
                "projectCode":"yy1221-1bianhao",
                "overallAmount":0,
                "overallAmountOneOrTwo":0,
                "overallAmountView":"0.00",
                "overallAmountOneOrTwoView":"0.00",
                "dynamicCost":0,
                "dynamicCostOneOrTwo":0,
                "dynamicCostView":"0.00",
                "dynamicCostOneOrTwoView":"0.00",
                "difference":0,
                "differenceOneOrTwo":0,
                "differenceView":"0.00",
                "differenceOneOrTwoView":"0.00",
                "num":"CBLX11",
                "upNode":null,
                "upNodeName":null,
                "upNodeNameAll":null,
                "nodeNum":1,
                "differenceText":null,
                "costType":"1",
                "parentId":0,
                "rulesCategory":null,
                "childList":[
                    {
                        "id":"1745330220727898114",
                        "createId":70551,
                        "createTime":"2024-01-11 14:22:06",
                        "updateTime":"2024-01-11 14:22:46",
                        "dataStatus":1,
                        "companyName":null,
                        "projectName":"yy1221-1项目名称",
                        "companyCode":"CC19-0018",
                        "projectCode":"yy1221-1bianhao",
                        "overallAmount":0,
                        "overallAmountOneOrTwo":0,
                        "overallAmountView":"0.00",
                        "overallAmountOneOrTwoView":"0.00",
                        "dynamicCost":0,
                        "dynamicCostOneOrTwo":0,
                        "dynamicCostView":"0.00",
                        "dynamicCostOneOrTwoView":"0.00",
                        "difference":0,
                        "differenceOneOrTwo":0,
                        "differenceView":"0.00",
                        "differenceOneOrTwoView":"0.00",
                        "num":"CBLX11-1",
                        "upNode":null,
                        "upNodeName":null,
                        "upNodeNameAll":null,
                        "nodeNum":2,
                        "differenceText":"12",
                        "costType":"12",
                        "parentId":"1745330167158247426",
                        "rulesCategory":null,
                        "childList":[
                            {
                                "id":"1745330386436460546",
                                "createId":70551,
                                "createTime":"2024-01-11 14:22:45",
                                "updateTime":"2024-01-11 14:22:46",
                                "dataStatus":1,
                                "companyName":null,
                                "projectName":"yy1221-1项目名称",
                                "companyCode":"CC19-0018",
                                "projectCode":"yy1221-1bianhao",
                                "overallAmount":0,
                                "overallAmountOneOrTwo":0,
                                "overallAmountView":"0.00",
                                "overallAmountOneOrTwoView":"0.00",
                                "dynamicCost":0,
                                "dynamicCostOneOrTwo":0,
                                "dynamicCostView":"0.00",
                                "dynamicCostOneOrTwoView":"0.00",
                                "difference":0,
                                "differenceOneOrTwo":0,
                                "differenceView":"0.00",
                                "differenceOneOrTwoView":"0.00",
                                "num":"CBLX11-1-1",
                                "upNode":null,
                                "upNodeName":null,
                                "upNodeNameAll":null,
                                "nodeNum":3,
                                "differenceText":null,
                                "costType":"1234",
                                "parentId":"1745330220727898114",
                                "rulesCategory":null,
                                "childList":[

                                ]
                            }
                        ]
                    }
                ]
            },
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值