【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实现一棵树的结构,如何实现呢,递归?如何递归呢
数据库中的数据是平铺的,一行行的,但是api要查询出来的数据要求是一棵树的结构, 怎么把平铺的数据转换成树状结构呢? public List<CarbonRepo> findCarbonRepo(Integer type){// 1. 先查出所有数据。 baseFindList 方法就是…...
视频批量剪辑工具,自定义视频速率,批量剪辑工具助力创意无限”
在视频制作的世界里,每一个细节都至关重要。今天,让我们来探索一项强大且创新的功能——自定义视频速率。利用它,你可以轻松地调整视频播放速度,赋予你的作品独特的个性和风格。 首先第一步,我们要打开好简单批量智剪…...
starrocks启动和停止和重启脚本
StarRocks启动和停止和重启脚本 编辑脚本: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后,原先Xcode14可以编译的项目出现大量Duplicate symbols,且引用报错指向同一个路径(一般为Framework)下的同一个文件。经过查找相关解决,可通过添加…...
Godot2D角色导航教程(角色随鼠标移动)
文章目录 运行结果2D导航概述开始前的准备2D导航创建导航网格创建角色 其他文章 运行结果 2D导航概述 Godot为2D和3D游戏提供了多个对象、类和服务器,以便于基于网格或基于网格的导航和路径查找。 说到导航,就得说一下导航网格,导航网格定义…...
论文阅读--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中没有小区或者小区边界的界定,所有接入…...
【深度学习】UniControl 一个统一的扩散模型用于可控的野外视觉生成
论文:https://arxiv.org/abs/2305.11147 代码:https://github.com/salesforce/UniControl#data-preparation docker快速部署:https://qq742971636.blog.csdn.net/article/details/133129146 文章目录 AbstractIntroductionRelated WorksUniCo…...
使用ChatGPT和MindShow一分钟生成PPT模板
对于最近学校组织的实习答辩,由于时间太短了,而且小编也特别的忙,于是就用ChatGPT结合MindShow一分钟快速生成PPT,确实很实用。只要你跟着小编后面,你也可以快速制作出这个PPT,下面小编就来详细介绍一下&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的区别
核心思想是根据不同的上下文为不同的信息分配不同的注意力权重 效果: Attention:它允许模型在解码时聚焦于输入的特定部分,从而更好地捕获上下文信息。Self-attention:它帮助模型捕获输入序列内部的关系,无论这些关系…...
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上的热点名称
你对你默认的热点名称感到厌倦了吗?这篇文章是为你准备的。在这里,你可以了解如何轻松更改iPhone上的热点名称。 个人热点会将你的手机数据转换为Wi-Fi信号。手机上的个人热点使用户能够与其他用户共享其蜂窝数据连接。当你在WIFI网络之外时,…...
【数据库审计】2023年数据库审计厂家汇总
我们大家都知道数据库审计的重要意义,不仅可以满足等保合规,还能进行风险告警,保障数据安全。那你知道目前市面上数据库审计厂家有哪些吗?这里小编就给大家汇总一下。 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:它是根据头部信息来决定的,在我们发送的消息中是可以携带一些头部信息的,类似与HTTP,我们可以根据这些头部信息来决定路由到哪一个消息队列中。 修改配置类内容 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文件重写并不是对原文件进行重新整理,而是直…...
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 精要:业务视角(三) 第3章 原则3.1 价值流3.2 部署流水线3.3 一切都应存储在版本控制系统中3.4 自动化配置管理3.5 完成的定义3.6 小结 第3章 原则 将原则从实践中分离出来,这是一种很有用的做法。当然了,这两个词分别有着…...
C语言——文件操作_学习笔记
一、引言——为什么使用文件 如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
