目录

1 通过递归获取树形结构、通过父节点获取最底层节点(叶子节点)数据、树形XML,可以参考以下内容:

2 实体和数据结构

2.1 Dept实体类

2.2 相关树形结构

3 根据子节点获取最上层节点(根节点)数据

3.1 service层

3.2  controller层

3.3 测试

4 根据子节点获取所有上级集合

4.1 service层

4.2 controller层

4.3 测试


1 通过递归获取树形结构、通过父节点获取最底层节点(叶子节点)数据、树形XML,可以参考以下内容:

Java树形结构 根据父节点获取最底层节点数据 树形xml_www_48568302的博客-CSDN博客

2 实体和数据结构

2.1 Dept实体类

/*** @author W* @createDate 2022/8/10* @description: Dept实体类*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Dept {private String id;private String name;private String parentId;private List<Dept> children = new ArrayList<>(); // 可不要
}

2.2 相关树形结构

3 根据子节点获取最上层节点(根节点)数据

3.1 service层

  • 方法一:根据根节点的parentId="0"进行判断递归
 /*** 根据子节点获取最上层节点* @param deptAll 所有部门集合* @param deptChild 子节点* @return*/public static Dept getMaximumParent(List<Dept> deptAll, Dept deptChild){Dept dept = null;String parentId = deptChild.getParentId();if(parentId.equals("0")){dept = deptChild;}else {List<Dept> parent = deptAll.stream().filter(item -> item.getId().equals(parentId)).collect(Collectors.toList());Dept maximumParent = getMaximumParent(deptAll, parent.get(0));dept = maximumParent;}return dept;}
  • 方法二:递归至上层节点为 null 返回入参的子节点数据为根节点
    /*** 根据子节点获取最上层节点* @param deptAll 所有部门集合* @param deptChild 子节点* @return*/public static Dept getMaximumParent2(List<Dept> deptAll, Dept deptChild) {if(ObjectUtil.isNotEmpty(deptChild)){String parentId = deptChild.getParentId();List<Dept> parentDepts = deptAll.stream().filter(item -> item.getId().equals(parentId)).collect(Collectors.toList());if(CollectionUtil.isNotEmpty(parentDepts)){Dept parentDept = parentDepts.get(0);Dept maximumParent2 = getMaximumParent2(deptAll, parentDept);if(maximumParent2==null){return parentDept;}return maximumParent2;}}return null;}

踩坑,通过索引获取空集合元素,会报IndexOutOfBoundsException下标越界异常,代码如下:

报错信息,如下:

3.2  controller层

@GetMapping("/getMaximumParent2")
public ResponseResult getMaximumParent2(){List<Dept> deptAll = GetLeafNode.getDeptAll(); // 所有部门集合Dept leafNodeDept = new Dept("322","四层8","32",null);Dept deptRoot = GetLeafNode.getMaximumParent2(deptAll, leafNodeDept);return ResponseResult.success("根据子节点获取根节点",deptRoot);
}

3.3 测试

4 根据子节点获取所有上级集合

4.1 service层

/*** 向上查询所有上级* @param deptAll 所有集合* @param leafNodeDept 叶子节点*/
public static Set<Dept> getDeptUpList(List<Dept> deptAll,Dept leafNodeDept){if(ObjectUtil.isNotEmpty(leafNodeDept)){Set<Dept> set = new HashSet<>();String parentId = leafNodeDept.getParentId();List<Dept> parentDepts = deptAll.stream().filter(item -> item.getId().equals(parentId)).collect(Collectors.toList());if(CollectionUtil.isNotEmpty(parentDepts)){Dept parentDept = parentDepts.get(0);set.add(parentDept);Set<Dept> deptUpTree = getDeptUpList(deptAll, parentDept);if(deptUpTree!=null){set.addAll(deptUpTree);}return set;}}return null;
}

4.2 controller层

@GetMapping("/getDeptUpList")
public ResponseResult getDeptUpTree(){List<Dept> deptAll = GetLeafNode.getDeptAll(); // 所有部门集合Dept leafNodeDept = new Dept("322","四层8","32",null);Set<Dept> deptUpTree = GetLeafNode.getDeptUpList(deptAll, leafNodeDept);return ResponseResult.success("根据子节点查出的所有上级",deptUpTree);
}

4.3 测试

Java根据子节点获取最上层节点(根节点)数据和所有上级集合相关推荐

  1. java计算二叉树的节点最小值_求二叉树根节点到叶子节点路径和的最小值:遍历(递归+非递归)...

    昨晚中兴笔试题,第一题是给定二叉树,每个节点的数据结构是 value,left,right,比较根节点到各个叶子节点路径和的大小,输出路径和的最小值.(补充:用ArrayList可以存储) 以前没做过 ...

  2. JAVA虚拟机 安全区域_JVM虚拟机如何枚举根节点:原理、安全点和安全区域

    原标题:JVM虚拟机如何枚举根节点:原理.安全点和安全区域 枚举根节点--可作为GC Roots的节点 可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的 ...

  3. Qt文档阅读笔记-Visual Parent的初步理解(获取QML中的根节点及其子结点)

    Qt有个继承树 在Widgets里面,可以通过setParent加进去! 搞QML的都知道QQmlContext继承于QObject 辣么问题在C++和QML交换的时候! 能不能通过QQmlConte ...

  4. Java如何使用dom4j获取,添加,删除,查找,设置Element节点呢?

    转自: Java如何使用dom4j获取,添加,删除,查找,设置Element节点呢? 下文笔者讲述DOM4J操作Element节点的示例分享,如下所示 获取文档的根节点 Element rootElm ...

  5. elementui tree获取父节点_elementUI 树状图 点击子节点获取父节点

    权限使用elementUI tree 组件,点击子节点获取对应多级的父节点 这是应用的组件 :data="hovePermissData" :default-checked- ke ...

  6. pyqt 实现控件移除_pyqt5:删除树控件(QTreeWidget)的子节点/根节点

    主要代码 # 删除控件树子节点/根节点 def deleteItem(self): try: # 尝试删除子节点(通过其父节点,调用removeChild函数进行删除) currNode = self ...

  7. DOM对象,节点,获取元素的非行间样式,元素的偏移量等属性词

    获取页面中的元素的方法 作用: 通过各种方式获取页面中的元素 以前我们说过, id 可以直接使用 这个方法只能通过 id 获取 今天学的就是使用各种方式 比如: id, 类名, 标签名, 选择器 的方 ...

  8. 获取二叉树的所有叶子节点、获取全树深度与左右子树深度求解:递归

    树的左右子树深度 全树的深度 //因为我们现在能够不重复,不遗漏获取每一个节点,只有前中后序3种方法,所以,我们首先先写出 //先序递归获取树的深度 int hight = 0;//它可以在多个函数之 ...

  9. 数据结构-树:根节点、子节点、叶子节点是什么?

    前言:这个属于数据结构:树. 下面给个例子图解释(根节点.子节点.叶子节点). 上图数字 1.3.7是叶子节点:(因为他们下面没有分叉出子节点,所以称为:叶子节点)[度为0] 数字2.8是子节点: ( ...

最新文章

  1. View 4桌面虚拟化炙手可热 但未熟透
  2. 一篇网易获奖的产品分析来敲门:『有道云笔记』产品体验报告
  3. java 鼠标绘图,教您如何用JAVA程序实现鼠标绘图
  4. 556. 下一个更大元素 III
  5. 最新计算机主板参数,电脑主板参数知识
  6. 初学者学习opengl是用红宝书好还是蓝宝书好?
  7. python字符串只保留字母_在字符串中只保留字母字符(多语言)
  8. 自定义maven插件的实现
  9. 13.ActiveMQ 优缺点
  10. iPhone 检测 iPhone X 设备的几种方式和分辨率终极指南
  11. 计算机的发展经历的变革主要基于,计算机应用基础试题
  12. 基于Jsoup的Java爬虫-爬取必应壁纸网站的壁纸(Java静态壁纸爬虫实例)
  13. 2021年度总结,男儿努力平生志
  14. macbook不能进系统 备份数据_U盘装系统,系统分区备份,万兴数据恢复,介绍几款好用的系统软件...
  15. PS2021 编辑PDF文件,修改文字
  16. 为什么要写单元测试?如何写单元测试?
  17. 1481: 考试排名(一)(结构体专题)
  18. 计算机与艺术联姻阶段,数字媒体艺术概论第二次作业
  19. 拒绝访问html,为什么IE常常出现拒绝访问 ie拒绝访问的原因及解决方法
  20. System.Threading.ThreadAbortException: 正在中止线程。

热门文章

  1. 计算机网络利弊的作文英语作文,网络的利弊英语作文模板及范文赏析
  2. vuejs 数组定义字段_一个漂亮的文本字段,用于格式化VueJS制作的电话号码
  3. 安装tomcat后运行Tomcat8.exe一闪而逝解决方案
  4. python 使用 turtle 画双心(丘比特之箭)
  5. [APIO2009]采油区域 题解
  6. pgadmin4远程连接 postgresql服务
  7. 人工智能公司招聘资深java开发工程师
  8. Java 解压缩各种格式
  9. KindEditor插件(富文本编辑器)的使用
  10. 蓝桥杯 ADV-287 算法提高 Monday-Saturday质因子