【API要返回一棵树的结构】数据库表结构是平铺的数据,但是api要实现树状结构展示。api实现一棵树的结构,如何实现呢,递归?如何递归呢

数据库中的数据是平铺的,一行行的,但是api要查询出来的数据要求是一棵树的结构,

怎么把平铺的数据转换成树状结构呢?


    public List<CarbonRepo> findCarbonRepo(Integer type){
        // 1. 先查出所有数据。 baseFindList 方法就是查询数据库,返回一个list对象、CarbonRepo 就是数据库中某张表的数据实体

        List<CarbonRepo> list = this.baseFindList(new CarbonRepo().setType(type).setActiveFlag(true));

        List<CarbonRepo> collect = list.stream()
                // 2. 找出所有顶级(规定 2位code 为顶级)
                .filter(o -> o.getCode().length() == 2)
                // 3.给当前父级的 childList 设置子
                .peek(o -> {
                    o.setChildList(getChildList(o, list));
                    o.setKey(o.getId());
                })
                // 4.收集
                .collect(Collectors.toList());

        return  collect;
    }

    // 通过递归的方式设置每个对象下的子属性。数据库中表的设计是通过code,parent
    // 根据当前父类 找出子类, 并通过递归找出子类的子类
    private List<CarbonRepo> getChildList(CarbonRepo carbonRepo, List<CarbonRepo> list) {
        return list.stream()
                //筛选出父节点code == parentCode 的所有对象 => list
                .filter(o -> StringUtil.equals(carbonRepo.getCode(), o.getParentCode()))
                .peek(o -> {
                    o.setChildList(getChildList(o, list));
                    o.setKey(o.getId());
                })
                .collect(Collectors.toList());
    }

数据表结构:

CREATE TABLE `data_carbon_repo` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `code` varchar(32) NOT NULL COMMENT '编码',
  `name` varchar(32) NOT NULL COMMENT '名称',
  `parent_code` varchar(32) NOT NULL COMMENT '父编码',
  `type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '不同用途区分',
  `active_flag` tinyint(4) NOT NULL DEFAULT '1' COMMENT '删除标识 1: 未删除 0:已删除',
  `creator` bigint(20) DEFAULT NULL COMMENT '创建人id',
  `modifier` bigint(20) DEFAULT NULL COMMENT '修改人id',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modify_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=344 DEFAULT CHARSET=utf8 COMMENT='材料库配置表'

api返回的数据:

{
    "code": 100,
    "message": "成功",
    "data": [
        {
            "id": 279,
            "code": "01",
            "name": "国标数据",
            "parentCode": "0",
            "type": 2,
            "activeFlag": 1,
            "creator": null,
            "modifier": null,
            "createTime": "2023-08-18 16:40:46",
            "modifyTime": "2023-08-18 16:40:46",
            "childList": [
                {
                    "id": 280,
                    "code": "0101",
                    "name": "材料碳排放计算标准",
                    "parentCode": "01",
                    "type": 2,
                    "activeFlag": 1,
                    "creator": null,
                    "modifier": null,
                    "createTime": "2023-08-18 16:40:46",
                    "modifyTime": "2023-08-18 16:40:46",
                    "childList": [
                        {
                            "id": 281,
                            "code": "010101",
                            "name": "水泥混凝土类",
                            "parentCode": "0101",
                            "type": 2,
                            "activeFlag": 1,
                            "creator": null,
                            "modifier": null,
                            "createTime": "2023-08-18 16:40:46",
                            "modifyTime": "2023-08-18 16:40:46",
                            "childList": [],
                            "key": 281
                        },
                        {
                            "id": 282,
                            "code": "010102",
                            "name": "建材制品类",
                            "parentCode": "0101",
                            "type": 2,
                            "activeFlag": 1,
                            "creator": null,
                            "modifier": null,
                            "createTime": "2023-08-18 16:40:46",
                            "modifyTime": "2023-08-18 16:40:46",
                            "childList": [],
                            "key": 282
                        },
                        {
                            "id": 283,
                            "code": "010103",
                            "name": "钢铁金属类",
                            "parentCode": "0101",
                            "type": 2,
                            "activeFlag": 1,
                            "creator": null,
                            "modifier": null,
                            "createTime": "2023-08-18 16:40:46",
                            "modifyTime": "2023-08-18 16:40:46",
                            "childList": [],
                            "key": 283
                        },
                        {
                            "id": 284,
                            "code": "010104",
                            "name": "玻璃及门窗类",
                            "parentCode": "0101",
                            "type": 2,
                            "activeFlag": 1,
                            "creator": null,
                            "modifier": null,
                            "createTime": "2023-08-18 16:40:46",
                            "modifyTime": "2023-08-18 16:40:46",
                            "childList": [],
                            "key": 284
                        },
                        {
                            "id": 285,
                            "code": "010105",
                            "name": "其他",
                            "parentCode": "0101",
                            "type": 2,
                            "activeFlag": 1,
                            "creator": null,
                            "modifier": null,
                            "createTime": "2023-08-18 16:40:46",
                            "modifyTime": "2023-08-18 16:40:46",
                            "childList": [],
                            "key": 285
                        }
                    ],
                    "key": 280
                }
            ],
            "key": 279
        },
        {
            "id": 286,
            "code": "02",
            "name": "省标数据",
            "parentCode": "0",
            "type": 2,
            "activeFlag": 1,
            "creator": null,
            "modifier": null,
            "createTime": "2023-08-18 16:40:46",
            "modifyTime": "2023-08-18 16:40:46",
            "childList": [
                {
                    "id": 287,
                    "code": "0201",
                    "name": "江苏省民用建筑碳排放规则(征求意见稿)",
                    "parentCode": "02",
                    "type": 2,
                    "activeFlag": 1,
                    "creator": null,
                    "modifier": null,
                    "createTime": "2023-08-18 16:40:46",
                    "modifyTime": "2023-08-18 16:40:46",
                    "childList": [
                        {
                            "id": 288,
                            "code": "020101",
                            "name": "水泥及其制品类",
                            "parentCode": "0201",
                            "type": 2,
                            "activeFlag": 1,
                            "creator": null,
                            "modifier": null,
                            "createTime": "2023-08-18 16:40:46",
                            "modifyTime": "2023-08-18 16:40:46",
                            "childList": [],
                            "key": 288
                        },
                        {
                            "id": 289,
                            "code": "020102",
                            "name": "地方材料及建材制品类",
                            "parentCode": "0201",
                            "type": 2,
                            "activeFlag": 1,
                            "creator": null,
                            "modifier": null,
                            "createTime": "2023-08-18 16:40:46",
                            "modifyTime": "2023-08-18 16:40:46",
                            "childList": [],
                            "key": 289
                        },
                        {
                            "id": 290,
                            "code": "020103",
                            "name": "黑色及有色金属类",
                            "parentCode": "0201",
                            "type": 2,
                            "activeFlag": 1,
                            "creator": null,
                            "modifier": null,
                            "createTime": "2023-08-18 16:40:46",
                            "modifyTime": "2023-08-18 16:40:46",
                            "childList": [],
                            "key": 290
                        },
                        {
                            "id": 291,
                            "code": "020104",
                            "name": "玻璃及门窗",
                            "parentCode": "0201",
                            "type": 2,
                            "activeFlag": 1,
                            "creator": null,
                            "modifier": null,
                            "createTime": "2023-08-18 16:40:46",
                            "modifyTime": "2023-08-18 16:40:46",
                            "childList": [],
                            "key": 291
                        },
                        {
                            "id": 292,
                            "code": "020105",
                            "name": "化学制品",
                            "parentCode": "0201",
                            "type": 2,
                            "activeFlag": 1,
                            "creator": null,
                            "modifier": null,
                            "createTime": "2023-08-18 16:40:46",
                            "modifyTime": "2023-08-18 16:40:46",
                            "childList": [],
                            "key": 292
                        },
                        {
                            "id": 293,
                            "code": "020106",
                            "name": "自来水",
                            "parentCode": "0201",
                            "type": 2,
                            "activeFlag": 1,
                            "creator": null,
                            "modifier": null,
                            "createTime": "2023-08-18 16:40:46",
                            "modifyTime": "2023-08-18 16:40:46",
                            "childList": [],
                            "key": 293
                        },
                        {
                            "id": 294,
                            "code": "020107",
                            "name": "装饰面层",
                            "parentCode": "0201",
                            "type": 2,
                            "activeFlag": 1,
                            "creator": null,
                            "modifier": null,
                            "createTime": "2023-08-18 16:40:46",
                            "modifyTime": "2023-08-18 16:40:46",
                            "childList": [],
                            "key": 294
                        },
                        {
                            "id": 295,
                            "code": "020108",
                            "name": "油漆、涂料类",
                            "parentCode": "0201",
                            "type": 2,
                            "activeFlag": 1,
                            "creator": null,
                            "modifier": null,
                            "createTime": "2023-08-18 16:40:46",
                            "modifyTime": "2023-08-18 16:40:46",
                            "childList": [],
                            "key": 295
                        },
                        {
                            "id": 296,
                            "code": "020109",
                            "name": "预制构件",
                            "parentCode": "0201",
                            "type": 2,
                            "activeFlag": 1,
                            "creator": null,
                            "modifier": null,
                            "createTime": "2023-08-18 16:40:46",
                            "modifyTime": "2023-08-18 16:40:46",
                            "childList": [],
                            "key": 296
                        },
                        {
                            "id": 297,
                            "code": "020110",
                            "name": "环保建材",
                            "parentCode": "0201",
                            "type": 2,
                            "activeFlag": 1,
                            "creator": null,
                            "modifier": null,
                            "createTime": "2023-08-18 16:40:46",
                            "modifyTime": "2023-08-18 16:40:46",
                            "childList": [],
                            "key": 297
                        }
                    ],
                    "key": 287
                }                 
            ],
            "key": 286
        }         
    ],
    "success": true
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值