ToB企服应用市场:ToB评测及商务社交产业平台

标题: 递归遍历树状结构优雅实现 [打印本页]

作者: 去皮卡多    时间: 2024-8-7 13:22
标题: 递归遍历树状结构优雅实现
递归遍历树状结构优雅实现

实体:
  1. @Data
  2. @Builder
  3. public class Menu {
  4.   private Integer id;
  5.   private String name;
  6.   private Integer parentId;
  7.   private List<Menu> childrenList;
  8.   public Menu(Integer id, String name, Integer parentId) {
  9.     this.id = id;
  10.     this.name = name;
  11.     this.parentId = parentId;
  12.   }
  13.   public Menu(Integer id, String name, Integer parentId, List<Menu> childrenList) {
  14.     this.id = id;
  15.     this.name = name;
  16.     this.parentId = parentId;
  17.     this.childrenList = childrenList;
  18.   }
  19. }
复制代码
实现:
  1. @SpringBootTest
  2. public class RecursionTest {
  3.   @Test
  4.   public void recursion() {
  5.     List<Menu> menus = Arrays.asList(
  6.             new Menu(1, "根节点", 0),
  7.             new Menu(2, "子节点1", 1),
  8.             new Menu(3, "子节点1.1", 2),
  9.             new Menu(4, "子节点1.2", 2),
  10.             new Menu(5, "根节点1.3", 2),
  11.             new Menu(6, "根节点2", 1),
  12.             new Menu(7, "根节点2.1", 6),
  13.             new Menu(8, "根节点2.2", 6),
  14.             new Menu(9, "根节点2.2.1", 7),
  15.             new Menu(10, "根节点2.2.2", 7),
  16.             new Menu(11, "根节点3", 1),
  17.             new Menu(12, "根节点3.1", 11));
  18.     // 获取父节点
  19.     List<Menu> collect = menus.stream()
  20.             .filter(m -> m.getParentId() == 0)
  21.             .peek((m) -> m.setChildrenList(getChildren(m, menus)))
  22.             .collect(Collectors.toList());
  23.     System.out.println(JSONUtil.toJsonStr(collect));
  24.   }
  25.   private List<Menu> getChildren(Menu root, List<Menu> all) {
  26.     return all.stream()
  27.             .filter(m -> Objects.equals(m.getParentId(), root.getId()))
  28.             .peek(m -> m.setChildrenList(getChildren(m, all)))
  29.             .collect(Collectors.toList());
  30.   }
  31. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4