Java实现树形结构的示例代码

作者:小刘要努力 时间:2023-07-30 01:05:19 

前言

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

数据库表结构

Java实现树形结构的示例代码

实现思路

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 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实现树形结构的示例代码

来源:https://blog.csdn.net/weixin_44684272/article/details/124549784

标签:Java,树形,结构
0
投稿

猜你喜欢

  • Linux环境g++编译GDAL动态库操作方法

    2022-02-23 09:41:45
  • Android List(集合)中的对象以某一个字段排序案例

    2021-10-07 03:28:39
  • Android自定义View实现天气预报折线图

    2023-08-22 14:37:50
  • springboot加载复杂的yml文件获取不到值的解决方案

    2021-07-29 18:26:11
  • Android中使用背景色Alpha值遇到的一个坑

    2023-06-04 11:47:31
  • Java用递归方法解决汉诺塔问题详解

    2022-11-23 03:11:40
  • 基于c# 接口的实例详解

    2023-10-22 22:22:11
  • IntelliJ IDEA(2019)安装破解及HelloWorld案例(图文)

    2022-07-01 22:43:39
  • java利用mybatis拦截器统计sql执行时间示例

    2021-08-22 11:35:41
  • myEclipse配置jdk1.7教程

    2022-07-21 11:25:35
  • 详谈signed 关键字

    2022-09-19 13:45:36
  • SpringMVC请求流程源码解析

    2021-08-07 03:35:11
  • C#实现合并多个word文档的方法

    2022-10-02 08:32:39
  • 浅谈Java三大框架与应用

    2023-04-16 18:25:01
  • Spring整合junit的配置过程图解

    2022-12-18 16:37:48
  • 浅析SpringBoot2底层注解@Conditional@ImportResource

    2023-08-01 23:35:51
  • C# 如何在MVC3中取消备用控制器的选择

    2023-02-16 06:48:18
  • Android 七种进度条的样式

    2022-01-22 07:15:23
  • Java中static变量作用和用法详解

    2021-11-09 12:01:04
  • java中Date类和Strng类的灵活转化

    2022-12-09 07:47:24
  • asp之家 软件编程 m.aspxhome.com