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

网友投稿 298 2022-07-30


目录前言数据库表结构实现思路具体代码1、造数据,和数据库表数据一致2、树型结构实体类

前言

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

数据库表结构

实现思路

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 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]"));

liShKeUXxwgVst.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*/

public List builTree(List list) {

List treeList = new ArrayList<>();

for (Tree tree : this.getRootNode(list)) {

//建立子树节点

tree = this.buildChilTree(tree,list);

//为根节点设置子树节点

treeList.add(tree);

}

return treeList;

}

/*

* @version V1.0

* Title: buildChilTree

* @ahttp://uthor LiuYanQiang

* @description 通过递归来创建子树形结构

* @createTime 2022/5/3 0:18

* @param [tree, list]

* @return com.lyq.generateTree.Tree*/

private Tree buildChilTree(Tree tree,List list) {

List 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*/

private List getRootNode(List list) {

List rootList = new ArrayList<>();

for (Tree tree : list) {

if (tree.getP_id().equals("0")) {

rootList.add(tree);

}

}

return rootList;

}

}

最后返回情况如下


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解SpringBoot中自定义和配置拦截器的方法
下一篇:Java超详细分析继承与重写的特点(java的继承性)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~