1、Java递归将List数据转换为Tree结构数据
https://blog.csdn.net/yuan_xiaohou/article/details/82461892?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2aggregatepagefirst_rank_v2~rank_aggregation-1-82461892.pc_agg_rank_aggregation&utm_term=Java+%E5%B0%86list%E8%BD%AC%E6%8D%A2%E4%B8%BAtree&spm=1000.2123.3001.4430
2、java8使用stream()转化
https://blog.csdn.net/weixin_33725126/article/details/93244840
3、递归组装
https://blog.csdn.net/xcymorningsun/article/details/79254819
4、java8.stream().map()
// 调用转化的方法
tree2List(menuPermissions, 0L);
// 递归***list转化成tree的递归方法!!!
private List<MenuPermission> tree2List(List<MenuPermission> menus, Long parentId) {
return menus.stream()
.map(l -> {
// 如果当前节点是parentId的一个孩子A
if (parentId.equals(l.getParentId())) {
// 获取孩子A的所有孩子As找出来,并标记到A的children list中存起来
List<MenuPermission> cNode = treeList(menus, l.getId());
l.setChildren(cNode);
// 遍历list当前的节点i,设置完成该节点i的所有children之后,就该返回了;
// 返回也就是:继续在menus列表中找下一个结点的所有children
return l;
}
return null;
})
.filter(Objects::nonNull)
.sorted(Comparator.comparing(MenuPermission::getSort, Comparator.nullsLast(Integer::compareTo)