前几天碰到了一个小问题是关于数据库取出数据然后弄成树状结构类似于目录,首先想到的是递归,于是自己就做了个小demo来测试这个功能。

实体类

@Data
public class CategoryPojo {private int id;private String categoryName;//名称private int  parentId;//父类idprivate List<CategoryPojo> nodes=new ArrayList<>();//用来存放子类数组·}

递归方法

public class Recursion {public static CategoryPojo treeSelect(int id, List<CategoryPojo> bodyList, CategoryPojo category){List<CategoryPojo> childList =new ArrayList();for (CategoryPojo c : bodyList) {if (Objects.equals(id, c.getParentId())) {treeSelect(c.getId(), bodyList,c);childList.add(c);}}category.setNodes(childList);return category;}
}

因为我是测试所以没有写到数据库中是自己加的假数据,效果一样

public class FindAlls {public static List<CategoryPojo> findAll() {List<CategoryPojo> categoryList=new ArrayList<CategoryPojo>();CategoryPojo category1=new CategoryPojo();category1.setId(1);category1.setCategoryName("河南省");categoryList.add(category1);CategoryPojo category2=new CategoryPojo();category2.setId(2);category2.setCategoryName("河北省");categoryList.add(category2);CategoryPojo category3=new CategoryPojo();category3.setId(3);category3.setCategoryName("駐馬店市");category3.setParentId(1);categoryList.add(category3);CategoryPojo category4=new CategoryPojo();category4.setParentId(3);category4.setId(4);category4.setCategoryName("汝南縣");CategoryPojo category5=new CategoryPojo();category5.setParentId(4);category5.setId(5);category5.setCategoryName("我家");categoryList.add(category4);CategoryPojo category6=new CategoryPojo();category6.setParentId(2);category6.setId(6);category6.setCategoryName("石家莊");categoryList.add(category6);List<CategoryPojo> rootList = new ArrayList<>();List<CategoryPojo> bodyList = new ArrayList<>();categoryList.forEach(c ->{if (c.getParentId()==0){rootList.add(c);}else {bodyList.add(c);}});List<CategoryPojo> list=new ArrayList<>();rootList.forEach(c->{CategoryPojo category = Recursion.treeSelect(c.getId(), bodyList, c);list.add(category);});return  list;}public static void main(String[] args) {List<CategoryPojo> list=findAll();System.out.println(list);}
}

结果如下:

[CategoryPojo(id=1, categoryName=河南省, parentId=0, nodes=[CategoryPojo(id=3, categoryName=駐馬店市, parentId=1, nodes=[CategoryPojo(id=4, categoryName=汝南縣, parentId=3, nodes=[])])]), CategoryPojo(id=2, categoryName=河北省, parentId=0, nodes=[CategoryPojo(id=6, categoryName=石家莊, parentId=2, nodes=[])])]

主要是利用递归一层一层把子节点加到上一个节点当中,然后简单地树状图就出来了。

树状排序(目录结构)相关推荐

  1. python学习笔记(十七) Tkinter鼠标事件、树状层级目录和一些补充

    目录 1.鼠标点击事件: 2.鼠标移动事件: 3.鼠标释放事件: 4.组合按键: 5.相对布局: 6.绝对布局: 7.表格布局: 8.表格数据: 9.树状层级目录: 1.鼠标点击事件: import ...

  2. oracle树状排序,Oracle树状结构查询

    oracle用表的形式组织数据,某些数据还呈现树状结构,提供了对这些数据的组织.查询等功能.在扫描树结构表时,要依次访问树中的每一个节点,并且每个节点只能访问一次,其步骤如下: 1:从根节点开始 2: ...

  3. sql 树状结构中知道 父节点与孙节点_集群环境中使用Zookeeper实现分布式幂等控制...

    一.什么是Zookeeper? Zookeeper(业界简称zk)是一种提供配置管理.分布式协同以及命名的中心化服务,这些提供的功能都是分布式系统中非常底层且必不可少的基本功能,但是如果自己实现这些功 ...

  4. Linux基本目录结构

    上一步我们已经搭建好实验环境了,这一节就来实际操作一下,到底什么是CentOS,到底什么是Linux操作系统,写什么,如何去做,如何去打开,下面我们带着这些疑惑展开这一节 1.打开终端,有些微型版的C ...

  5. Linux笔记1(安装,目录结构,远程登录,vi和vim,用户管理,实用指令。定时调度,挂载。)

    1.linux的安装 1.先安装virtualmachine15.5 2.再安装Linux(CentOS7.6/centOS8.1) 首先在自己的window电脑上安装虚拟机,然后虚拟机相当于一台电脑 ...

  6. java中的左值右值_利用左值右值实现树状结构

    image.png 1. 查询 1.1. 得到节点 Node 下的所有节点,并按树状排序 SELECT * FROM tree WHERE lft BETWEEN Node.Lft AND Node. ...

  7. 树状结构大数据类型的高效支持

    树状结构大数据类型的高效支持 陈世敏 中国科学院计算技术研究所,北京 100190 摘要:传统的关系数据模型难以满足大数据应用日益丰富的数据表达和处理的需求,因此实践中涌现了多种非传统的大数据类型.其 ...

  8. 简单の暑假总结——树状数组

    2.1 树状数组 树状数组,顾名思义,长得像树的数组,用于处理一些单点修改以及区间查询的问题.其时间复杂度为 O(log⁡2n)O(\log _2n)O(log2​n) .如过我们使用一些一般的数据结 ...

  9. 树状数组(详细分析+应用),看不懂打死我!

    树状数组介绍 在学习一个算法之前一定要清楚它能干嘛,能解决什么样的问题,对你解题是否有帮助,然后才去学习它! 那么接下来看如下几个问题 什么是树状数组 顾名思义就是一个结构为树形结构的数组,于二叉树的 ...

  10. QNX独特的工程目录结构

    目录结构实例 以Ubuntu系统下,创建arm架构的demo工程为例. 目录结构说明 config 用于存放配置文件 lib 目录用于编译动态库和静态库 src 目录用于编译可执行文件 test 目录 ...

最新文章

  1. ubuntu c++检测usb口事件变化_从MacBook支持USB-C口充电看电脑标配充电器发展史
  2. 十一.python面向对象(接口)abstractmethod,ABCMeta
  3. 不是python中用于开发用户界面的第三方库-Python计算生态习题(50题)
  4. 使用pyinstaller打包python_使用pyinstaller打包Python项目,python
  5. OpenCASCADE绘制测试线束:布尔运算命令之设置选项的操作
  6. IdentityServer4 第三方快速入门和示例
  7. 将以太坊封装为 ERC20
  8. swift 滑动 iphone解锁_这10个iPhone隐藏功能,我就不信你全知道
  9. GP学习(十)-Mosaic raster datasets to a file raster format
  10. 详解Python中函数和模块的特殊属性__annotations__
  11. bugkuCTF解题记录——5、web基础$_POST
  12. ELK收集日志到mysql
  13. Kotlin — 使用IDEA运行第一个Kotlin程序,打印“Hello World”!
  14. python 模块zlib 压缩与解压
  15. python标准库——random模块
  16. 程序人生:不知道我讲了什么的回应稿
  17. linux内核源码版本查看
  18. c语言正弦波程序_怎样很好的恢复一个正弦波信号
  19. 连续型随机变量与离散型随机变量
  20. RF射频信号,高速信号能将电源平面作为参考平面吗?

热门文章

  1. linux php gmagick,Linux下编译安装GraphicsMagick及PHP扩展gmagick
  2. Linux添加浮动路由,Linux路由配置详情
  3. cdlinux之U盘启动cdlinux破解wifi(计算机系破解无线密码的方式 就不使用wifi万能钥匙了)-- 没有发现无线网卡
  4. Happy Week
  5. lsblk命令 – 查看系统的磁盘
  6. Centos7 Kubernetes(K8s) k8s 开发 单服务器部署 rocketmq
  7. 6)Thymelead th:with 局部变量 与 属性优先级 和 Thymeleaf 注释
  8. 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_04.mybatis概述
  9. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第2节 TCP协议_1_TCP通信的概述(上)...
  10. kickstart_2018_round_H_C Let Me Count The Ways