600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Java根据子节点获取最上层节点(根节点)数据和所有上级集合

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

时间:2019-12-21 22:21:17

相关推荐

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

目录

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

2 实体和数据结构

2.1 Dept实体类

2.2 相关树形结构

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

3.1 service层

3.2 controller层

3.3 测试

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

4.1service层

4.2 controller层

4.3 测试

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

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

2 实体和数据结构

2.1 Dept实体类

/*** @author W* @createDate /8/10* @description: Dept实体类*/@Data@AllArgsConstructor@NoArgsConstructorpublic 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.1service层

/*** 向上查询所有上级* @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 测试

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。