递归遍历树状结构优雅实现

递归遍历树状结构优雅实现

实体:

@Data
@Builder
public class Menu {
  private Integer id;
  private String name;
  private Integer parentId;
  private List<Menu> childrenList;

  public Menu(Integer id, String name, Integer parentId) {
    this.id = id;
    this.name = name;
    this.parentId = parentId;
  }

  public Menu(Integer id, String name, Integer parentId, List<Menu> childrenList) {
    this.id = id;
    this.name = name;
    this.parentId = parentId;
    this.childrenList = childrenList;
  }
}

实现:

@SpringBootTest
public class RecursionTest {
  @Test
  public void recursion() {
    List<Menu> menus = Arrays.asList(
            new Menu(1, "根节点", 0),
            new Menu(2, "子节点1", 1),
            new Menu(3, "子节点1.1", 2),
            new Menu(4, "子节点1.2", 2),
            new Menu(5, "根节点1.3", 2),
            new Menu(6, "根节点2", 1),
            new Menu(7, "根节点2.1", 6),
            new Menu(8, "根节点2.2", 6),
            new Menu(9, "根节点2.2.1", 7),
            new Menu(10, "根节点2.2.2", 7),
            new Menu(11, "根节点3", 1),
            new Menu(12, "根节点3.1", 11));

    // 获取父节点
    List<Menu> collect = menus.stream()
            .filter(m -> m.getParentId() == 0)
            .peek((m) -> m.setChildrenList(getChildren(m, menus)))
            .collect(Collectors.toList());
    System.out.println(JSONUtil.toJsonStr(collect));
  }

  private List<Menu> getChildren(Menu root, List<Menu> all) {
    return all.stream()
            .filter(m -> Objects.equals(m.getParentId(), root.getId()))
            .peek(m -> m.setChildrenList(getChildren(m, all)))
            .collect(Collectors.toList());
  }

}
千百度
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容