Java递归将List转为树形结构 | Java Debug 笔记

1,688 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接

前言

由于在做前端动态路由时,需要将后端的数据转为tree便于前端构造Vue Router

一、开发环境

JDK11(使用了forEach代替循环)

二、具体使用

1.思路

使用递归来获取子节点,在递归的过程中将已添加到树结构中的数据剔除,减少递归调用的次数

2.实现

Menu内部类定义如下所示:

@Data
static class Menu {
    private Integer id;

    /**
    * 父节点Id
    */
    private Integer parentId;

    /**
    * 菜单名
    */
    private String menuName;

    List<Menu> children;
}

具体的实现方法如下所示:

public List<Menu> list2Tree(List<Menu> list, Integer pId) {
    List<Menu> tree = new ArrayList<>();
    Iterator<Menu> it = list.iterator();
    while (it.hasNext()) {
        Menu m = it.next();
        if (m.parentId == pId) {
            tree.add(m);
            // 已添加的元素删除掉
            it.remove();
        }
    }
    // 寻找子元素
    tree.forEach(n -> n.children = list2Tree(list, n.id));
    return tree;
}

三、结果

输出结果如下所示:

image.png

四、总结

递归yyds!🐂