【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语言——文件操作_学习笔记
一、引言——为什么使用文件 如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的…...
102. 在控制平面主机名更改后恢复 Rancher 配置的 RKE2 集群
Environment 环境 Rancher provisioned RKE2 downstream cluster control plane node hostname changed, without removing the node from the cluster. Rancher 配置了 RKE2 下游集群控制平面节点的主机名更改,但未将该节点从集群中移除。 Procedure 程序It is …...
多个source、多个sink
关键配置:sink的:plugin_input ["source_data1", "source_data2"]对应模型┌──────────┐│ Source A │──┐└──────────┘ │├──▶ Sink┌──────────┐ ││ Source B │──┘└──────…...
ARL灯塔扫不出指纹?手把手教你用Python脚本批量导入指纹库,提升资产识别准确率
ARL灯塔指纹识别优化实战:Python脚本批量导入与精准率提升指南 资产侦察灯塔(ARL)作为渗透测试领域的重要工具,其核心价值在于准确识别目标资产的技术特征。然而许多中级用户发现,默认指纹库在面对特定行业或新型资产…...
源代码之下的硅基启示录——Claude Code“核泄漏”事件的深度剖析与时代回响
引言 公元2026年3月30日,一个看似平常的春日,硅基世界却迎来了一场史无前例的地震。 一家以“安全”为最高信条的AI公司,以一种最荒诞的方式,亲手打开了潘多拉的魔盒。Anthropic,这家估值高达3800亿美元的AI新贵&#…...
当00后测试员给CEO系统提了487个缺陷后
在软件测试领域,一个年轻测试员的行动往往能引发行业深思。故事始于一家科技公司新上线的“CEO决策支持系统”——一个旨在为高管提供实时数据分析和战略建议的核心平台。项目团队信心满满地推进上线,却未料到一位00后测试员小陈的介入,彻底改…...
手把手教你搭建PaddleOCR开发环境:从CUDA配置到模型验证
1. 环境准备:从零搭建PaddleOCR开发环境 最近在做一个票据识别的项目,需要用到OCR技术。对比了几种开源方案后,发现PaddleOCR不仅识别准确率高,而且对中文支持特别好。但在搭建环境时踩了不少坑,特别是CUDA和cuDNN的版…...
Mermaid Live Editor:5分钟快速创建专业图表的终极免费工具
Mermaid Live Editor:5分钟快速创建专业图表的终极免费工具 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-e…...
对于对话中的用户流失预测,OpenClaw 的预测模型特征有哪些?
在讨论对话场景中的用户流失预测时,OpenClaw 的预测模型特征设计其实体现了一种很务实的思路。它没有追求那种听起来特别炫酷、参数庞大的复杂架构,而是把重点放在了如何从实际的对话数据中提取出真正能反映用户去留意图的信号。 这些特征大致可以归为几…...
为什么90%的词库转换都会失败?输入法词库迁移的终极解决方案:全方位指南
为什么90%的词库转换都会失败?输入法词库迁移的终极解决方案:全方位指南 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 在数字化时代&#x…...
攻克Switch 19.0.1系统Atmosphere启动故障:从诊断到优化的完整方案
攻克Switch 19.0.1系统Atmosphere启动故障:从诊断到优化的完整方案 【免费下载链接】Atmosphere Atmosphre is a work-in-progress customized firmware for the Nintendo Switch. 项目地址: https://gitcode.com/GitHub_Trending/at/Atmosphere 在Switch主机…...
