4 篇文章0 订阅
方式一、使用递归方式实现
1. private List<SysDept> getSysDepts(String deptId) { 2. // 1、获取表中所有数据 (自行根据实际场景拿到所有表数据) 3. List<SysDept> all = getAllDept(); 4. // 3、返回的结果集 5. List<SysDept> tree = new ArrayList<>(); 6. // 4、获取到最外层的部门信息 7. List<SysDept> parentSysDept = all.stream().filter(dept -> dept.getDeptId().equals(deptId)).collect(Collectors.toList()); 8. if (CollectionUtils.isNotEmpty(parentSysDept)){ 9. // 5、取出部门信息 10. SysDept dept = parentSysDept.get(0); 11. // 6、放入集合中 12. tree.add(dept); 13. // 7、添加子节点 14. addChildDept(dept, all); 15. } 16. return tree; 17. } 18. private void addChildDept(SysDept sysDept, List<SysDept> all) { 19. // 1、拿到所传部门的字部门列表 20. List<SysDept> tempList = all.stream() 21. .filter(dept -> sysDept.getDeptId().equals(dept.getParentId())) 22. .collect(Collectors.toList()); 23. sysDept.setChildren(tempList); 24. tempList.forEach(dept -> { 25. 2、添加子节点 26. addChildDept(dept, all); 27. }); 28. }
效果展示:
方式二、利用Hutool工具进行实现
1. private List<Tree<String>> getSysDepts(String deptId) { 2. // 获取所有数据 3. List<SysDept> all = getAllDept(); 4. //配置 5. TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); 6. // 自定义属性名 都要默认值的 7. treeNodeConfig.setIdKey("deptId"); 8. // 最大递归深度 9. treeNodeConfig.setDeep(4); 10. 11. //转换器 (这里参数的deptId,指的是最外层的deptId值) 12. List<Tree<String>> treeNodes = TreeUtil.build(all, deptId, treeNodeConfig, 13. (treeNode, tree) -> { 14. tree.setParentId(treeNode.getParentId()); 15. // 扩展属性 ...(可以自行设置需要返回的字段) 16. tree.putExtra("deptId", treeNode.getDeptId()); 17. tree.putExtra("status", treeNode.getStatus()); 18. }); 19. return treeNodes; 20. }
效果展示: