java递归获取某个父节点下面的所有子节点

柔情只为你懂 2023-10-18 11:12 182阅读 0赞

1.Menu实体类

  1. package recursion;
  2. /**
  3. * Created by tl on 2016/4/10.
  4. */
  5. public class Menu {
  6. private String id;
  7. private String name;
  8. private String pid;
  9. public String getId() {
  10. return id;
  11. }
  12. public void setId(String id) {
  13. this.id = id;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public String getPid() {
  22. return pid;
  23. }
  24. public void setPid(String pid) {
  25. this.pid = pid;
  26. }
  27. }

2.测试类

  1. package recursion;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. /**
  5. * Created by tl on 2016/4/10.
  6. */
  7. public class MenuRecursion {
  8. //子节点
  9. static List<Menu> childMenu=new ArrayList<Menu>();
  10. /**
  11. * 获取某个父节点下面的所有子节点
  12. * @param menuList
  13. * @param pid
  14. * @return
  15. */
  16. public static List<Menu> treeMenuList( List<Menu> menuList, int pid){
  17. for(Menu mu: menuList){
  18. //遍历出父id等于参数的id,add进子节点集合
  19. if(Integer.valueOf(mu.getPid())==pid){
  20. //递归遍历下一级
  21. treeMenuList(menuList,Integer.valueOf(mu.getId()));
  22. childMenu.add(mu);
  23. }
  24. }
  25. return childMenu;
  26. }
  27. public static void main(String args[]) {
  28. List<Menu> menuList=new ArrayList<Menu>();
  29. Menu mu=new Menu();
  30. mu.setId("1");
  31. mu.setName("目录");
  32. mu.setPid("0");
  33. Menu mu1=new Menu();
  34. mu1.setId("2");
  35. mu1.setName("目录1");
  36. mu1.setPid("1");
  37. Menu mu2=new Menu();
  38. mu2.setId("3");
  39. mu2.setName("目录1.1");
  40. mu2.setPid("2");
  41. Menu mu3=new Menu();
  42. mu3.setId("4");
  43. mu3.setName("目录1.2");
  44. mu3.setPid("2");
  45. Menu mu4=new Menu();
  46. mu4.setId("5");
  47. mu4.setName("目录2");
  48. mu4.setPid("1");
  49. Menu mu5=new Menu();
  50. mu5.setId("6");
  51. mu5.setName("目录2.1");
  52. mu5.setPid("5");
  53. Menu mu6=new Menu();
  54. mu6.setId("7");
  55. mu6.setName("目录2.2");
  56. mu6.setPid("5");
  57. Menu mu7=new Menu();
  58. mu7.setId("8");
  59. mu7.setName("目录2.2.1");
  60. mu7.setPid("7");
  61. menuList.add(mu);
  62. menuList.add(mu1);
  63. menuList.add(mu2);
  64. menuList.add(mu3);
  65. menuList.add(mu4);
  66. menuList.add(mu5);
  67. menuList.add(mu6);
  68. menuList.add(mu7);
  69. List<Menu> childList=treeMenuList(menuList,0);
  70. for(Menu m:childList){
  71. System.out.println(m.getId() + " " + m.getName());
  72. }
  73. }
  74. }

3.控制台结果:

  1. 3 目录1.1
  2. 4 目录1.2
  3. 2 目录1
  4. 6 目录2.1
  5. 8 目录2.2.1
  6. 7 目录2.2
  7. 5 目录2
  8. 1 目录

附录:

递归在项目的使用代码:

1.部门Department:

  1. public class Department{
  2. /**
  3. * id
  4. */
  5. private Integer departmentId;
  6. /**
  7. * 单位名称
  8. */
  9. private String name;
  10. /**
  11. * 父级单位id,顶级单位为1
  12. */
  13. private Integer parentId;
  14. (省略getset方法)
  15. }

2.递归代码(查询某个部门下面的所有子部门):

  1. /**
  2. * 递归获取某个部门id下面的所有子单位
  3. */
  4. private void findChildDepartments(Set<Department> departHashSet, Integer departmentId) {
  5. Department dep=departmentRepository.findByDepartmentId(departmentId);
  6. List<Department> deptments = new ArrayList<Department>();
  7. deptments.add(dep);
  8. /**
  9. * 加入当前单位
  10. */
  11. departHashSet.addAll(deptments.stream().collect(Collectors.toList()));
  12. /**
  13. * 获取子单位
  14. */
  15. List<Department> departments = departmentRepository.findByParentId(departmentId);
  16. for (Department d : departments) {
  17. /**
  18. * 递归子单位
  19. */
  20. findChildDepartments(departHashSet, d.getDepartmentId());
  21. }
  22. }

原文:https://blog.csdn.net/tomcat_2014/article/details/51113961

发表评论

表情:
评论列表 (有 0 条评论,182人围观)

还没有评论,来说两句吧...

相关阅读