当前位置: 首页 > news >正文

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

相关文章:

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

数据库中的数据是平铺的&#xff0c;一行行的&#xff0c;但是api要查询出来的数据要求是一棵树的结构&#xff0c; 怎么把平铺的数据转换成树状结构呢&#xff1f; public List<CarbonRepo> findCarbonRepo(Integer type){// 1. 先查出所有数据。 baseFindList 方法就是…...

视频批量剪辑工具,自定义视频速率,批量剪辑工具助力创意无限”

在视频制作的世界里&#xff0c;每一个细节都至关重要。今天&#xff0c;让我们来探索一项强大且创新的功能——自定义视频速率。利用它&#xff0c;你可以轻松地调整视频播放速度&#xff0c;赋予你的作品独特的个性和风格。 首先第一步&#xff0c;我们要打开好简单批量智剪…...

starrocks启动和停止和重启脚本

StarRocks启动和停止和重启脚本 编辑脚本&#xff1a;vim start_stop_starrocks.sh 备注:IP修改为自己的IP即可 #!/bin/bashcase $1 in "start"){for i in 12.3.7.147 12.3.7.148 12.3.7.149 12.3.7.150doecho " --------启动 $i be -------"ssh $i &qu…...

升级Xcode 15后,出现大量Duplicate symbols问题

https://developer.apple.com/forums/thread/731090 升级到Xcode 15后&#xff0c;原先Xcode14可以编译的项目出现大量Duplicate symbols&#xff0c;且引用报错指向同一个路径&#xff08;一般为Framework&#xff09;下的同一个文件。经过查找相关解决&#xff0c;可通过添加…...

Godot2D角色导航教程(角色随鼠标移动)

文章目录 运行结果2D导航概述开始前的准备2D导航创建导航网格创建角色 其他文章 运行结果 2D导航概述 Godot为2D和3D游戏提供了多个对象、类和服务器&#xff0c;以便于基于网格或基于网格的导航和路径查找。 说到导航&#xff0c;就得说一下导航网格&#xff0c;导航网格定义…...

论文阅读--Cell-free massive MIMO versus small cells

无蜂窝大规模MIMO与小蜂窝网络 论文信息 Ngo H Q, Ashikhmin A, Yang H, et al. Cell-free massive MIMO versus small cells[J]. IEEE Transactions on Wireless Communications, 2017, 16(3): 1834-1850. 无蜂窝大规模MIMO中没有小区或者小区边界的界定&#xff0c;所有接入…...

【深度学习】UniControl 一个统一的扩散模型用于可控的野外视觉生成

论文&#xff1a;https://arxiv.org/abs/2305.11147 代码&#xff1a;https://github.com/salesforce/UniControl#data-preparation docker快速部署&#xff1a;https://qq742971636.blog.csdn.net/article/details/133129146 文章目录 AbstractIntroductionRelated WorksUniCo…...

使用ChatGPT和MindShow一分钟生成PPT模板

对于最近学校组织的实习答辩&#xff0c;由于时间太短了&#xff0c;而且小编也特别的忙&#xff0c;于是就用ChatGPT结合MindShow一分钟快速生成PPT&#xff0c;确实很实用。只要你跟着小编后面&#xff0c;你也可以快速制作出这个PPT&#xff0c;下面小编就来详细介绍一下&am…...

C#对字典容器Dictionary<TKey, TValue>内容进行XML序列化或反序列化报错解决方法

一、问题描述 在使用C#对字典容器Dictionary<TKey, TValue>内容进行XML序列化报错【System.Exception:“不支持类型 System.Collections.Generic.Dictionary2[[System.String, mscorlib, Version2.0.0.0, Cultureneutral, PublicKeyTokenb77a5c561934e089],[System.Strin…...

【Linux】Linux 之用户管理

Linux 之用户管理 1.Linux 下的用户2.配置文件3.用户管理3.1 useradd3.1.1 创建用户并指定用户 ID3.1.2 指定用户的主目录3.1.3 指定用户的主组 3.2 adduser3.3 userdel3.4 密码文件3.4.1 字段含义解释3.4.2 给用户添加密码 3.5 其他与用户相关的命令 4.修改用户的信息4.1 user…...

NLP:Attention和self-attention的区别

核心思想是根据不同的上下文为不同的信息分配不同的注意力权重 效果&#xff1a; Attention&#xff1a;它允许模型在解码时聚焦于输入的特定部分&#xff0c;从而更好地捕获上下文信息。Self-attention&#xff1a;它帮助模型捕获输入序列内部的关系&#xff0c;无论这些关系…...

Gap Year Plan

Gap Year Plan gap year 几个大方向 健康 60 KG10 新朋友 钱 5W RMB基本常识、社会机制补齐开网店 英语 TOELF日常交流 & 面试 口语Science Research Writing 2nd 课程 科研常识CMU 15-445MIT 6.824CMU 15-721Full Stack OpenDDIA 实习 GSOC 2024 PostgreSQL / …...

厌烦了iPhone默认的热点名称?如何更改iPhone上的热点名称

你对你默认的热点名称感到厌倦了吗&#xff1f;这篇文章是为你准备的。在这里&#xff0c;你可以了解如何轻松更改iPhone上的热点名称。 个人热点会将你的手机数据转换为Wi-Fi信号。手机上的个人热点使用户能够与其他用户共享其蜂窝数据连接。当你在WIFI网络之外时&#xff0c…...

【数据库审计】2023年数据库审计厂家汇总

我们大家都知道数据库审计的重要意义&#xff0c;不仅可以满足等保合规&#xff0c;还能进行风险告警&#xff0c;保障数据安全。那你知道目前市面上数据库审计厂家有哪些吗&#xff1f;这里小编就给大家汇总一下。 2023年数据库审计厂家汇总 1、行云管家 2、安恒信息 3、…...

C#WPF StackPanel布局及Border边框应用实例

本文介绍C#WPF StackPanel布局及Border边框应用实例,通过演示掌握StackPanel布局及Border边框用法,并对对齐方式、边距、尺寸设置、Border的圆角使用作了演示。 具体概念本文不再赘述。 Xaml文件: <Windowx:Class="PropertyDemo.MainWindow"xmlns="htt…...

RabbitMQ-第四种交换机类型

接上文 RabbitMQ-主题模式 1 第四种交换机类型 header:它是根据头部信息来决定的&#xff0c;在我们发送的消息中是可以携带一些头部信息的&#xff0c;类似与HTTP&#xff0c;我们可以根据这些头部信息来决定路由到哪一个消息队列中。 修改配置类内容 Configuration public…...

Redis AOF重写原原理

重写aof之前 appendonly.aof.1.base.aof appendonly.aof.1.incr.aof appendonly.aof.manifest 重写aof 一次 appendonly.aof.2.base.aof 大小变化 appendonly.aof.2.incr.aof 大小o appendonly.aof.manifest 大小不变 AOF文件重写并不是对原文件进行重新整理&#xff0c;而是直…...

es6.x和es7.x如何创建索引?

一、es6.x {"settings": {"number_of_shards": "2","number_of_replicas": "2","max_result_window": 100000},"mappings": {"doc": {"dynamic": "strict","prope…...

《DevOps 精要:业务视角》- 读书笔记(三)

DevOps 精要:业务视角&#xff08;三&#xff09; 第3章 原则3.1 价值流3.2 部署流水线3.3 一切都应存储在版本控制系统中3.4 自动化配置管理3.5 完成的定义3.6 小结 第3章 原则 将原则从实践中分离出来&#xff0c;这是一种很有用的做法。当然了&#xff0c;这两个词分别有着…...

C语言——文件操作_学习笔记

一、引言——为什么使用文件 如果没有文件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运行程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进行持久化的…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...