【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语言——文件操作_学习笔记
一、引言——为什么使用文件 如果没有文件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的…...
独立开发者如何利用 Taotoken 统一管理多个 AI 项目支出
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何利用 Taotoken 统一管理多个 AI 项目支出 对于同时维护多个小型 AI 应用或实验项目的独立开发者而言,成…...
通达信主力进场洗盘拉升出货副图指标公式源码
以下是指标365网整理的通达信主力进场洗盘拉升出货副图指标公式的源码:指标核心逻辑:1、紫色表示主力进场吸筹阶段;2、红色表示试盘洗盘阶段;3、黄色表示拉升阶段;4、绿色表示出货阶段;5、柱子长短表示各阶…...
HiveWE魔兽地图编辑器:5分钟快速上手指南,告别卡顿创作新时代
HiveWE魔兽地图编辑器:5分钟快速上手指南,告别卡顿创作新时代 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 还在为《魔兽争霸III》原版地图编辑器缓慢的加载速度和繁琐的操作而烦恼…...
嵌入式Linux信号量实战:多线程互斥点灯程序设计与实现
1. 项目概述与核心思路最近在整理嵌入式Linux开发笔记时,翻到了一个挺有意思的小项目:用Linux信号量来实现一个互斥的点灯程序。听起来可能有点“杀鸡用牛刀”的感觉,毕竟点个灯用个全局变量或者简单的标志位也能搞定。但这个小项目背后的价值…...
点支承幕墙玻璃破裂故障分析
点支承幕墙玻璃破裂故障分析 【作 者】:龙文志 【摘 要】:本文从点支承幕墙玻璃破裂故瘴出发,系统阐述了点支承幕墙玻璃破裂故障多于其它玻璃幕墙的原因,提出了点支承玻璃幕墙设计时,除对玻璃面板的大面应力进行计算分析外,同时也应该对玻璃孔边应力进行设计分析;为了…...
Arch Linux Hyprland自动化安装脚本:高效打造现代化Wayland桌面环境
Arch Linux Hyprland自动化安装脚本:高效打造现代化Wayland桌面环境 【免费下载链接】Arch-Hyprland For automated installation of Hyprland on Arch Linux or any Arch Linux-based distros 项目地址: https://gitcode.com/gh_mirrors/ar/Arch-Hyprland A…...
高光谱数据处理避坑指南:从RAW文件到反射率,你的白板校正做对了吗?
高光谱数据处理避坑指南:从RAW文件到反射率,你的白板校正做对了吗? 在实验室里,一位研究员盯着屏幕上扭曲的反射率曲线皱起了眉头——明明按照标准流程采集了白板和暗电流数据,为什么最终结果会出现负值和异常波动&am…...
通过Nodejs快速为Web应用接入多模型AI能力
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过Nodejs快速为Web应用接入多模型AI能力 现代Web应用对智能交互能力的需求日益增长,无论是客服对话、内容辅助生成还…...
具身智能涉及的交互技术及实施难点
在具身智能(Embodied Intelligence, EI)迈入规模化交付与产线落地的关键阶段 [临近时间验证, ,它与用户为中心交互系统工程(UCI-SE)的融合达到了前所未有的深度 。传统机器人的交互仅限于键盘或教导盒(Pend…...
Speechless:三步完成微博PDF备份的终极免费Chrome扩展
Speechless:三步完成微博PDF备份的终极免费Chrome扩展 【免费下载链接】Speechless 把新浪微博的内容,导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 在数字时代,我们的社交…...
