好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

前言

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

数据库表结构

实现思路

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

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

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

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

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

具体代码

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

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、树型结构实体类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

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实现树形结构的示例代码的文章就介绍到这了,更多相关Java树形结构内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://blog.csdn.net/weixin_44684272/article/details/124549784

查看更多关于Java实现树形结构的示例代码的详细内容...

  阅读:19次