当前位置: 首页 > 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;如果要将数据进行持久化的…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...