需求

需要查询组织架构下所有部门数据,这里层级有多深我们并不知道,所以不能通过for循环指定次数来遍历,看这个图

解决方案

参考了一些文档大概意思就是--使用递归(名词解释:程序调用自身的编程技巧称为递归)

以下是我实现代码:

    /*** @Description: 获取所有的部门信息** @Author: chengang* @Date: 2021/11/2 16:12* @param: parentId 父部门ID,首次进来传root ID* @param: depts 最终需要返回的数据,首次进来是空的* @return:**/@Overridepublic void queryAllDeptInfos(Long parentId, List<DeptEntity> depts){// 根据部门ID获取 ,子部门信息,List<DeptEntity> queryDepts = this.getDeptInfos(parentId);// 没有子部门信息就返回if (CollectionUtils.isEmpty(queryDepts)) {return Collections.emptyList();}// 遍历下一层级部门数据,加入到最终的listfor (int i = 0; i < queryDepts.size(); i++) {DeptEntity entity = queryDepts.get(i);// 当前部门,子部门加到返回的listdepts.add(entity);// 递归查询子层级的数据List<DeptEntity> deptEntities = this.queryAllDeptInfos(entity.getDeptId(), depts);}return queryDepts;}

下面是调用的地方,depts对象 最终获取的就是root节点下整个树状结构的数据,当然可以传其他非root根节点,最终会返回整个节点下树状信息

// 所有部门信息list
List<DeptEntity> depts = new ArrayList<>();
// 调用获取所有部门信息
dingTalkService.queryAllDeptInfos(1L, depts);

这个比较费脑子,画画图方便理解

1、我们先查出传入的节点下,所有的子节点

2、如果没有就返回

3、遍历整个子级数据,一一加入到最终LIST,

4、继续调用当前方法查询出当前子级的子级,会通过参数传递,加入到最终结果LIST

其实就是在方法里,继续调用当前的方法,这里注意一定要有结束条件。比如:查不到就结束。

树状结构数据查询方法相关推荐

  1. Java - 树状结构数据解析

    由于工作中好多地方需要树状结构数据,在参考了网上递归实现和数据库存储过程实现,都不太满意.突然想到zTree也有解析该类数据的要求,所以在阅读了zTree源码的前提了,按照他的实现原理,写了一个jav ...

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

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

  3. web中生成水平树状结构的方法.

    一直想找一个生成水平树状结构的算法, 今天偶然在Code Project上发现了一个使用javascript实现的方法. 不敢独享, 特拿出来与诸位分享.啥也不说,先看效果: 下载地址 (注:国外地址 ...

  4. mysql php 封装类_PHP递归实现层级树状展开的方法

    这篇文章主要为大家详细介绍了PHP递归实现层级树状展开的相关资料,需要的朋友可以参考下 效果图: 实现代码: $db = mysql_connect('localhost', 'root', 'roo ...

  5. mysql如何实现树状结构数据列表

    1.数据库设计 CREATE TABLE `expense_type` (`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '费用类型唯一主键ID',`NAME ...

  6. java 树形数据_JAVA处理树状结构数据

    之前对于树状结构的处理没什么困难,但是最近的一个需求就很麻烦.其实遍历出树状结构并不是什么困难的事情,但是这个需求需要从底层节点统计数量,然后向上修改所有的父级结构. 最难的地方就是这个地方,可能有的 ...

  7. 使用递归遍历树状结构数据

    递归遍历树状结构 datas:[{id: 1,name: '分组1',expand: true,type:'group',editable:false,active:false,children: [ ...

  8. hdu 4417 树状数组查询区间不是1到n时需要转换,例[0,5]变成[1,6]

    http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意:求区间内小于等于h的数的个数. 方法: 先对输入的n个数由小到大排序,在对查询的h由小到大排序. # ...

  9. mysql树状结构查询子节点和父节点

    1. 查询父节点: SELECT m.* FROM region m, ( SELECT@r AS _id,( SELECT @r := parent_id FROM region WHERE reg ...

最新文章

  1. 安装JAVA内部错误61003_JDK1.8 安装报内部错误:61003
  2. 关于AVR单片机熔丝位的设置和拯救方法大全 AVR单片机熔丝位的设置和详细的拯救方法...
  3. Java POI Excel( pio:纯java操作excel的api )
  4. am335x LCD参数更改
  5. rsync android app,如何rsync到android
  6. JSP的自定义标签(二)之带属性的标签
  7. Julia : 再谈HDF5 的save 和 load
  8. win7如何设置wifi热点_win7台式机如何设置IP地址为固定的IP地址?
  9. 医疗管理核心制度之 十八、信息安全管理制度
  10. IE插件在注册表中的相关位置
  11. 问卷调查报告html,问卷调查报告格式
  12. python+ffmpeg视频转码转格式
  13. weed-fs 压力测试
  14. ballerina 学习二十七 项目k8s部署 运行
  15. 一篇文章带你全面了解“电脑”内外组成
  16. 英语不好,能不能学软件编程?不懂英文能学编程吗
  17. 《富豪谷底求生》纪录片记录
  18. Android 自动化触发GC
  19. 这些科技公司们的名字,都是从何而来?
  20. 陈丹琦带队全员女将发新论文!提出AI消除性别偏见新方法,适用于任何模型 | EMNLP 2022...

热门文章

  1. React 开发中面临的九个重要抉择
  2. 安卓学习日记——广告
  3. 2018年区块链人才趋势:降温、调节、蓄势待发
  4. android华为和小米,都是用安卓,为什么用小米和华为体验完全不一样?网友的评论扎心了!...
  5. phpstudy和宝塔-测试本地网页
  6. 中国中药产业品牌竞争格局及未来发展走向分析报告2021-2027年
  7. Pytorch Illegal instruction 解决(鸵鸟战术)
  8. py2exe安装及使用方法
  9. Quartus II 9.0编译时出现Error: Current license file does not support the EP2C35F484C8 device的问题
  10. Selenium自动化框架理论总结