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


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

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

    1. public List findCarbonRepo(Integer type){
    2. // 1. 先查出所有数据。 baseFindList 方法就是查询数据库,返回一个list对象、CarbonRepo 就是数据库中某张表的数据实体
    3. List list = this.baseFindList(new CarbonRepo().setType(type).setActiveFlag(true));
    4. List collect = list.stream()
    5. // 2. 找出所有顶级(规定 2位code 为顶级)
    6. .filter(o -> o.getCode().length() == 2)
    7. // 3.给当前父级的 childList 设置子
    8. .peek(o -> {
    9. o.setChildList(getChildList(o, list));
    10. o.setKey(o.getId());
    11. })
    12. // 4.收集
    13. .collect(Collectors.toList());
    14. return collect;
    15. }
    1. // 通过递归的方式设置每个对象下的子属性。数据库中表的设计是通过code,parent
    2. // 根据当前父类 找出子类, 并通过递归找出子类的子类
    3. private List getChildList(CarbonRepo carbonRepo, List list) {
    4. return list.stream()
    5. //筛选出父节点code == parentCode 的所有对象 => list
    6. .filter(o -> StringUtil.equals(carbonRepo.getCode(), o.getParentCode()))
    7. .peek(o -> {
    8. o.setChildList(getChildList(o, list));
    9. o.setKey(o.getId());
    10. })
    11. .collect(Collectors.toList());
    12. }

    数据表结构:

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

    api返回的数据:

    1. {
    2. "code": 100,
    3. "message": "成功",
    4. "data": [
    5. {
    6. "id": 279,
    7. "code": "01",
    8. "name": "国标数据",
    9. "parentCode": "0",
    10. "type": 2,
    11. "activeFlag": 1,
    12. "creator": null,
    13. "modifier": null,
    14. "createTime": "2023-08-18 16:40:46",
    15. "modifyTime": "2023-08-18 16:40:46",
    16. "childList": [
    17. {
    18. "id": 280,
    19. "code": "0101",
    20. "name": "材料碳排放计算标准",
    21. "parentCode": "01",
    22. "type": 2,
    23. "activeFlag": 1,
    24. "creator": null,
    25. "modifier": null,
    26. "createTime": "2023-08-18 16:40:46",
    27. "modifyTime": "2023-08-18 16:40:46",
    28. "childList": [
    29. {
    30. "id": 281,
    31. "code": "010101",
    32. "name": "水泥混凝土类",
    33. "parentCode": "0101",
    34. "type": 2,
    35. "activeFlag": 1,
    36. "creator": null,
    37. "modifier": null,
    38. "createTime": "2023-08-18 16:40:46",
    39. "modifyTime": "2023-08-18 16:40:46",
    40. "childList": [],
    41. "key": 281
    42. },
    43. {
    44. "id": 282,
    45. "code": "010102",
    46. "name": "建材制品类",
    47. "parentCode": "0101",
    48. "type": 2,
    49. "activeFlag": 1,
    50. "creator": null,
    51. "modifier": null,
    52. "createTime": "2023-08-18 16:40:46",
    53. "modifyTime": "2023-08-18 16:40:46",
    54. "childList": [],
    55. "key": 282
    56. },
    57. {
    58. "id": 283,
    59. "code": "010103",
    60. "name": "钢铁金属类",
    61. "parentCode": "0101",
    62. "type": 2,
    63. "activeFlag": 1,
    64. "creator": null,
    65. "modifier": null,
    66. "createTime": "2023-08-18 16:40:46",
    67. "modifyTime": "2023-08-18 16:40:46",
    68. "childList": [],
    69. "key": 283
    70. },
    71. {
    72. "id": 284,
    73. "code": "010104",
    74. "name": "玻璃及门窗类",
    75. "parentCode": "0101",
    76. "type": 2,
    77. "activeFlag": 1,
    78. "creator": null,
    79. "modifier": null,
    80. "createTime": "2023-08-18 16:40:46",
    81. "modifyTime": "2023-08-18 16:40:46",
    82. "childList": [],
    83. "key": 284
    84. },
    85. {
    86. "id": 285,
    87. "code": "010105",
    88. "name": "其他",
    89. "parentCode": "0101",
    90. "type": 2,
    91. "activeFlag": 1,
    92. "creator": null,
    93. "modifier": null,
    94. "createTime": "2023-08-18 16:40:46",
    95. "modifyTime": "2023-08-18 16:40:46",
    96. "childList": [],
    97. "key": 285
    98. }
    99. ],
    100. "key": 280
    101. }
    102. ],
    103. "key": 279
    104. },
    105. {
    106. "id": 286,
    107. "code": "02",
    108. "name": "省标数据",
    109. "parentCode": "0",
    110. "type": 2,
    111. "activeFlag": 1,
    112. "creator": null,
    113. "modifier": null,
    114. "createTime": "2023-08-18 16:40:46",
    115. "modifyTime": "2023-08-18 16:40:46",
    116. "childList": [
    117. {
    118. "id": 287,
    119. "code": "0201",
    120. "name": "江苏省民用建筑碳排放规则(征求意见稿)",
    121. "parentCode": "02",
    122. "type": 2,
    123. "activeFlag": 1,
    124. "creator": null,
    125. "modifier": null,
    126. "createTime": "2023-08-18 16:40:46",
    127. "modifyTime": "2023-08-18 16:40:46",
    128. "childList": [
    129. {
    130. "id": 288,
    131. "code": "020101",
    132. "name": "水泥及其制品类",
    133. "parentCode": "0201",
    134. "type": 2,
    135. "activeFlag": 1,
    136. "creator": null,
    137. "modifier": null,
    138. "createTime": "2023-08-18 16:40:46",
    139. "modifyTime": "2023-08-18 16:40:46",
    140. "childList": [],
    141. "key": 288
    142. },
    143. {
    144. "id": 289,
    145. "code": "020102",
    146. "name": "地方材料及建材制品类",
    147. "parentCode": "0201",
    148. "type": 2,
    149. "activeFlag": 1,
    150. "creator": null,
    151. "modifier": null,
    152. "createTime": "2023-08-18 16:40:46",
    153. "modifyTime": "2023-08-18 16:40:46",
    154. "childList": [],
    155. "key": 289
    156. },
    157. {
    158. "id": 290,
    159. "code": "020103",
    160. "name": "黑色及有色金属类",
    161. "parentCode": "0201",
    162. "type": 2,
    163. "activeFlag": 1,
    164. "creator": null,
    165. "modifier": null,
    166. "createTime": "2023-08-18 16:40:46",
    167. "modifyTime": "2023-08-18 16:40:46",
    168. "childList": [],
    169. "key": 290
    170. },
    171. {
    172. "id": 291,
    173. "code": "020104",
    174. "name": "玻璃及门窗",
    175. "parentCode": "0201",
    176. "type": 2,
    177. "activeFlag": 1,
    178. "creator": null,
    179. "modifier": null,
    180. "createTime": "2023-08-18 16:40:46",
    181. "modifyTime": "2023-08-18 16:40:46",
    182. "childList": [],
    183. "key": 291
    184. },
    185. {
    186. "id": 292,
    187. "code": "020105",
    188. "name": "化学制品",
    189. "parentCode": "0201",
    190. "type": 2,
    191. "activeFlag": 1,
    192. "creator": null,
    193. "modifier": null,
    194. "createTime": "2023-08-18 16:40:46",
    195. "modifyTime": "2023-08-18 16:40:46",
    196. "childList": [],
    197. "key": 292
    198. },
    199. {
    200. "id": 293,
    201. "code": "020106",
    202. "name": "自来水",
    203. "parentCode": "0201",
    204. "type": 2,
    205. "activeFlag": 1,
    206. "creator": null,
    207. "modifier": null,
    208. "createTime": "2023-08-18 16:40:46",
    209. "modifyTime": "2023-08-18 16:40:46",
    210. "childList": [],
    211. "key": 293
    212. },
    213. {
    214. "id": 294,
    215. "code": "020107",
    216. "name": "装饰面层",
    217. "parentCode": "0201",
    218. "type": 2,
    219. "activeFlag": 1,
    220. "creator": null,
    221. "modifier": null,
    222. "createTime": "2023-08-18 16:40:46",
    223. "modifyTime": "2023-08-18 16:40:46",
    224. "childList": [],
    225. "key": 294
    226. },
    227. {
    228. "id": 295,
    229. "code": "020108",
    230. "name": "油漆、涂料类",
    231. "parentCode": "0201",
    232. "type": 2,
    233. "activeFlag": 1,
    234. "creator": null,
    235. "modifier": null,
    236. "createTime": "2023-08-18 16:40:46",
    237. "modifyTime": "2023-08-18 16:40:46",
    238. "childList": [],
    239. "key": 295
    240. },
    241. {
    242. "id": 296,
    243. "code": "020109",
    244. "name": "预制构件",
    245. "parentCode": "0201",
    246. "type": 2,
    247. "activeFlag": 1,
    248. "creator": null,
    249. "modifier": null,
    250. "createTime": "2023-08-18 16:40:46",
    251. "modifyTime": "2023-08-18 16:40:46",
    252. "childList": [],
    253. "key": 296
    254. },
    255. {
    256. "id": 297,
    257. "code": "020110",
    258. "name": "环保建材",
    259. "parentCode": "0201",
    260. "type": 2,
    261. "activeFlag": 1,
    262. "creator": null,
    263. "modifier": null,
    264. "createTime": "2023-08-18 16:40:46",
    265. "modifyTime": "2023-08-18 16:40:46",
    266. "childList": [],
    267. "key": 297
    268. }
    269. ],
    270. "key": 287
    271. }
    272. ],
    273. "key": 286
    274. }
    275. ],
    276. "success": true
    277. }

  • 相关阅读:
    【环境搭建】ubuntu工作站搭建全流程(显卡4090)
    Ultra Math Preview : VSCode上的LaTeX公式实时预览插件
    化繁为简,国内知名期货交易所依托 MogDB 数据库促信创改造项目提速
    【C++历练之路】list的重要接口||底层逻辑的三个封装以及模拟实现
    Linux cp 命令使用介绍
    I2C接口控制器之协议解析
    JAVA学习-行为抽象和Lambda.收集器
    怎么防止U盘复制电脑文件
    【Web 实战】记一次攻防实战
    视频融合云平台EasyCVR进程启动时报错“update cluster server”的排查及解决方法
  • 原文地址:https://blog.csdn.net/xzb5566/article/details/133673902