本文正在参加「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;
}
三、结果
输出结果如下所示:
四、总结
递归yyds!🐂