文章目录
前言
由于在做前端动态路由时,需要将后端的数据转为tree便于前端构造Vue Router
一、开发环境
- JDK11(使用了forEach代替循环)
二、具体使用
1.思路
使用递归来获取子节点,在递归的过程中将已添加到树结构中的数据剔除,减少递归调用的次数
2.实现
代码下载链接:https://download.csdn.net/download/weixin_38500202/13214868
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;
}
二、结果
输出结果如下所示
三、总结
递归yyds!🐂