每日日报 20211118

定义包含下级菜单的对象

继承自SysMenuEntity对象,增加了一个children属性,用于存储下级菜单。

@Data
public class SysMenuNode extends SysMenuEntity {

private List<SysMenuNode> children;
}
定义获取树形结构的方法

我们先过滤出parent_id为0的顶级菜单,然后给每个顶级菜单设置其子级菜单,covert方法的作用是从所有菜单中找出相应菜单的子级菜单

/**
* 获取菜单树形列表
*/
@GetMapping("/treeList")
public List<SysMenuNode> treeList() {
List<SysMenuEntity> sysMenuList = sysMenuService.list();
return sysMenuList.stream().filter(e -> e.getParentId().equals(0L)).map(e -> covert(e, sysMenuList)).collect(Collectors.toList());
}
为每个菜单设置子级菜单

这里我们使用filter操作来过滤出每个菜单的子级菜单,由于子级菜单下面可能还会有子级菜单,这里我们使用递归来解决。但是递归操作什么时候停止了? 这里把递归调用方法放到了map操作中去,当没有子级菜单时filter下的map操作便不会再执行,从而停止递归。

/**
* 递归封装children属性
* 当filter条件不满足时跳出递归
*/
private SysMenuNode covert(SysMenuEntity sysMenu, List<SysMenuEntity> sysMenuList) {
SysMenuNode node = new SysMenuNode();
BeanUtils.copyProperties(sysMenu, node);
List<SysMenuNode> children = sysMenuList.stream().filter(e -> e.getParentId().equals(sysMenu.getMenuId())).map(e -> covert(e, sysMenuList)).collect(Collectors.toList());
node.setChildren(children);
return node;
}

————————————————
版权声明:本文为CSDN博主「努力奋斗GO」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39940205/article/details/100532995

posted @ 2021-11-18 16:09  涛浪浪i  阅读(39)  评论(0)    收藏  举报