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

2023-01-21 0 3,644

目录

前言

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

数据库表结构

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

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 Java实现树形结构的示例代码 http://www.20zxx.cn/463370/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务