前言

由于业务需要,后端需要返回一个树型结构给前端,包含父子节点的数据已经在数据库中存储好,现在需要做的是如何以树型结构的形式返给给前端。

数据库表结构如下:

实现思路如下:

1、拿到有父子节点的集合数据

2、遍历集合数据,拿到所有的根节点

3、遍历根节点,拿到所有的子节点

4、递归子节点,将递归的子节点接上其父节点,直到子节点为空,递归完成

5、递归好后以集合形式返回,返回前端时以JSON格式转换后返回

具体代码如下:

1、造数据,和数据库表数据一致

package com.lyq.generateTree;import com.alibaba.fastjson.JSON;import java.util.ArrayList;
import java.util.List;/*** @author : [LiuYanQiang]* @version : [v1.0]* @className : TreeMain* @description : [描述说明该类的功能]* @createTime : [2022/5/3 0:05]* @updateUser : [LiuYanQiang]* @updateTime : [2022/5/3 0:05]* @updateRemark : [描述说明本次修改内容]*/
public class TreeMain {public static void main(String[] args) {List<Tree> list = new ArrayList<>();//造数据list.add(new Tree("22650", "0", "第一周"));list.add(new Tree("22651", "22650", "1.1  随堂练习:《你认为以下属于人工智能的是什么呢?》,时间:0.5min"));list.add(new Tree("22652", "22650", "1.2  主题讨论:《使用循环代码块绘制正五角星》,时间:5min"));list.add(new Tree("22653", "22650", "1.3  主题讨论:《延时测试》,时间:0.5min"));list.add(new Tree("22654", "22650", "1.4  调查问卷:《测试延时时间》, 时间:0.5min"));list.add(new Tree("22655", "22650", "1.5  研究与挑战:翟文彪老师开播啦,时间:1min,[N]"));list.add(new Tree("22656", "22650", "1.6  研究与挑战:米新江教授开播啦,时间:1min,[N]"));list.add(new Tree("22657", "22656", "1.6.1  研究与挑战:丁中文老师开播啦,时间:1min,[N]"));list.add(new Tree("22658", "22656", "1.6.2  研究与挑战:郝晓军老师开播啦,时间:1min,[N]"));list.add(new Tree("22659", "22656", "1.6.3  研究与挑战:张娟老师开播啦,时间:1min,[N]"));list.add(new Tree("22660", "22656", "1.6.4  研究与挑战:王怀军老师开播啦,时间:1min,[N]"));list.add(new Tree("22661", "22656", "1.6.5  研究与挑战:何操老师开播啦,时间:1min,[N]"));list.add(new Tree("22662", "22656", "1.6.6  研究与挑战:武新丽老师开播啦,时间:1min,[N]"));list.add(new Tree("22663", "22656", "1.6.7  一键签到:人脸识别,时间:2min"));list.add(new Tree("22664", "22656", "1.6.8  手势签到:人脸识别22,时间:2min"));list.add(new Tree("22665", "22656", "1.6.9  研究与挑战:吴欣明老师开播啦,时间:1min,[N]"));list.add(new Tree("22666", "22656", "1.6.10  研究与挑战:程艳艳老师开播啦,时间:1min,[N]"));list.add(new Tree("22667", "22656", "1.6.11  研究与挑战:本学期课程内容,时间:0.5min"));list.add(new Tree("22668", "22656", "1.6.12  研究与挑战:米老师的教学团队介绍,时间:0.3min"));list.add(new Tree("22669", "22650", "1.7  研究与挑战:米老师的教学团队介绍,时间:0.3min"));list.add(new Tree("22670", "22650", "1.8  研究与挑战:米老师的教学团队介绍,时间:0.3min"));list.add(new Tree("22671", "22650", "1.9  研究与挑战:助教机器人提醒您参与活动,时间:2min"));list.add(new Tree("22672", "22650", "1.10  研究与挑战:AR系统使用教程-学生端,时间:5min"));list.add(new Tree("22673", "22672", "1.10.1  研究与挑战:不一样的课堂修改版,时间:0.5min"));list.add(new Tree("22674", "22673", "1.10.1.1  研究与挑战:下载AR APP,时间:8min"));list.add(new Tree("22675", "22674", "1.10.1.1.1  研究与挑战:修改版手机端AR助教机器人的登录,时间:5min"));list.add(new Tree("22676", "22674", "1.10.1.1.2  研究与挑战:app页面展示,时间:2min"));list.add(new Tree("22677", "22674", "1.10.1.1.3  研究与挑战:使用网页版方式, 时间:3min"));list.add(new Tree("22678", "22674", "1.10.1.1.4  研究与挑战:《使用学习通账号密码登录AR网页版》,时间:5min"));list.add(new Tree("22679", "22674", "1.10.1.1.5  主题讨论:修改时间2022年4月4日《上传:进入AR网页版后的界面》,时间:3min"));list.add(new Tree("22680", "22673", "1.10.1.2  研究与挑战:AR学生端教程视频,时间:2min"));list.add(new Tree("22681", "22672", "1.10.2  研究与挑战:修改时间2022年4月4日温馨提示-钉钉,时间:0.3min"));list = new ReplacementTree().builTree(list);String jsonString = JSON.toJSONString(list);System.out.println(jsonString);}
}

2、树型结构实体类

package com.lyq.generateTree;import lombok.Data;import java.util.List;/*** @author : [LiuYanQiang]* @version : [v1.0]* @className : Tree* @description : [树型结构实体类]* @createTime : [2022/5/2 23:37]* @updateUser : [LiuYanQiang]* @updateTime : [2022/5/2 23:37]* @updateRemark : [描述说明本次修改内容]*/
@Data
public class Tree {private String id;private String p_id;private String chapter_title;private List<Tree> children;public Tree(String id, String p_id, String chapter_title) {this.id = id;this.p_id = p_id;this.chapter_title = chapter_title;}}

3、树型结构装换

package com.lyq.generateTree;import java.util.ArrayList;
import java.util.List;/*** @author : [LiuYanQiang]* @version : [v1.0]* @className : ReplacementTree* @description : [树型结构装换]* @createTime : [2022/5/2 23:37]* @updateUser : [LiuYanQiang]* @updateTime : [2022/5/2 23:37]* @updateRemark : [描述说明本次修改内容]*/
public class ReplacementTree {/** @version V1.0* Title: builTree* @author LiuYanQiang* @description 始树形结构创建* @createTime  2022/5/3 0:18* @param [list]* @return java.util.List<com.lyq.generateTree.Tree>*/public List<Tree> builTree(List<Tree> list) {List<Tree> treeList = new ArrayList<>();for (Tree tree : this.getRootNode(list)) {//建立子树节点tree = this.buildChilTree(tree,list);//为根节点设置子树节点treeList.add(tree);}return treeList;}/** @version V1.0* Title: buildChilTree* @author LiuYanQiang* @description 通过递归来创建子树形结构* @createTime  2022/5/3 0:18* @param [tree, list]* @return com.lyq.generateTree.Tree*/private Tree buildChilTree(Tree tree,List<Tree> list) {List<Tree> treeList = new ArrayList<>();for (Tree t : list) {//判断当前父节点是否存在子节点if (t.getP_id().equals(tree.getId())) {treeList.add(this.buildChilTree(t,list));}}tree.setChildren(treeList);return tree;}/** @version V1.0* Title: getRootNode* @author LiuYanQiang* @description 获取全部根节点* @createTime  2022/5/3 0:18* @param [list]* @return java.util.List<com.lyq.generateTree.Tree>*/private List<Tree> getRootNode(List<Tree> list) {List<Tree> rootList = new ArrayList<>();for (Tree tree : list) {if (tree.getP_id().equals("0")) {rootList.add(tree);}}return rootList;}
}

最后返回情况如下:

Java生成树型结构相关推荐

  1. Java生成树状结构返回结果

    树状结果集返回以及收集部分信息 对应的表结构和业务需求如下图所示 实现思路:递归业务代码 1.树状结构结果集返回 实现结果 业务代码 分析此处是先查询出根节点,暂定最大的FAQ.然后设置一个实体作为返 ...

  2. java redis 命名空间_redis里通过命名空间存储缓存,根据结构生成树型

    一般为了方便管理 redis 缓存,我们通过 : 来分隔不同的 key 来进行存储缓存,这样方便查看. 例如: game:upload_role:1000 game:member_info:2000 ...

  3. dtree和jquery构建树型结构

    对于小型的树型应用来说,dtree是一个不错的选择. 先看一眼dtree给的例子 构造静态树 首先引入css文件和js文件 <link rel="StyleSheet" hr ...

  4. Java对象内存结构

    转载自 Java对象内存结构 学C/C++出身的我,对Java有一点非常困惑,那就是缺乏计算对象占用内存大小的机制.而在C++中就可以通过sizeof运算符来获得基本类型以及类实例的大小.C和C++中 ...

  5. java创建型_Java创建型模式

    Java创建型模式 在软件工程中,创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象.基本的对象创建方式可能会导致设计上的问题,或增加设计的复杂度.创建型模式通过以某种方式控制 ...

  6. java字节型的关键字_DAY06-07 Java的基础语法-注释、标识符、关键字、数据类型

    Java的基础语法 注释 注释不会被执行,是给人看的 书写注释是一个非常好的习惯. 注释类型: (1)单行注释:// 注释内容 (2)多行注释:/ * - 注释内容-. * / (3)文档注释:/* ...

  7. 翻译Java虚拟机的结构

    英文原版:  https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html 直接谷歌翻译: Java SE规范 > Java虚拟机 ...

  8. Java程序猿从笨鸟到菜鸟之(九十二)深入java虚拟机(一)——java虚拟机底层结构具体解释...

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在曾经的博客里面,我们介绍了在java领域中大部分的知识点,从最基础的java最基本的语法 ...

  9. java JVM 内存结构

    一.java虚拟机内存结构: JVM是一种规范. 1.线程共享:堆.方法区 线程独享:虚拟机栈.本地方法栈.程序计数器 2.堆:是垃圾回收的主要区域 堆的内存又根据垃圾回收分为: (1).新生代:Ed ...

最新文章

  1. Win10命令行激活 电脑组装
  2. 用php计算自由落体,js模仿物理中的自由落体现象
  3. 【opencv】2.opencv绘图、视频等
  4. 同一数据库如果处理多个完全不同的业务?
  5. python使用curses库获取控制台的键盘输入(如上下左右)
  6. 自动生成 指定范围日期 生成字符串格式时间日期 --计算连续时间 SQL
  7. Java链接MySQL练习题:格式化日期、性别;避免代码注入
  8. oracle创建参数文件,Oracle的参数文件
  9. 《『若水新闻』客户端开发教程》——06.设计新闻内容UI
  10. 江西版七年级计算机教案,江西科技版《信息技术》七年级信息技术下册教案.doc...
  11. python写扫雷脚本_利用Python实现自动扫雷小脚本
  12. WINDOWS蓝屏照片
  13. Essay-One Piece海贼王每集剧情介绍
  14. 关于通过图注意神经网络处理多元时间序列的错误预测论文的讨论
  15. 揭秘三位图灵奖得主Hinton、LeCun、Bengio的传奇人生
  16. WWF(Windows Workflow Foundation)的简介
  17. linux命令如何分类,Linux系统命令的两种分类
  18. Java对Excel表格的操作
  19. 【CSS3 属性】CSS 3 transform:scale 与 transform:translate 作用在同一div元素,导致元素位置偏离
  20. css引入自定义字体/特殊字体/ttf格式语言包

热门文章

  1. iBatis数据库字段映射到Java对象。
  2. PowerDVD14极致蓝光版注册激活补丁
  3. 将训练好的模型转化为pb文件及pb应用
  4. 用友网络并购秉钧网络 加速布局企业互联网服务
  5. 《网页制作与网站建设从入门到精通》版权
  6. COleDateTime使用
  7. 如何压缩jpg图片的大小?可以一键压缩图片的软件有哪些?
  8. java定时器关闭再重启_Android定时器Timer的停止和重启实现代码
  9. linux国产操作系统下载网站,三分钟快速安装国产操作系统Ylmf OS
  10. 网易云信(音视频sdk)一面凉经