javaweb 菜单树

Vo

public class MenuVo {
    private  String  id ; //主键
    private  String parentId; //上层id
    private  String  name; //菜单名字
    private List<MenuVo> vos; //子节点


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getParentId() {
        return parentId;
    }

    public void setParentId(String parentId) {
        this.parentId = parentId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<MenuVo> getVos() {
        return vos;
    }

    public void setVos(List<MenuVo> vos) {
        this.vos = vos;
    }
}

实现逻辑

     @Override
    public List<MenuVo> selectTree() {
        // 查询所有数据
        List<MenuVo> menuVos = this.sysMenuDao.selectAll();
        if (CollectionUtils.isEmpty(menuVos)){
            return new ArrayList<MenuVo>();
        }
        //最顶层菜单    MenuConstants.PARENT_ID = "1" 最顶层id为1 
        List<MenuVo> menuBase = menuVos.stream().filter(vo -> MenuConstants.PARENT_ID.equals(vo.getParentId())).collect(Collectors.toList());
        menuBase.stream().filter(vo -> !CollectionUtils.isEmpty(menuBase)).forEach(vo -> {
            List<MenuVo> menus = iterateMenus(menuVos, vo.getId());
            vo.setVos(menus);
        });
        return  menuBase;
    }

    private List<MenuVo> iterateMenus(List<MenuVo> menuVos, String id) {
        List<MenuVo>  result  = new ArrayList<>();
        menuVos.forEach(vo ->{
            String menuId = vo.getId();
            //获取菜单父id
            String parentId = vo.getParentId();
            if (StringUtils.isNotBlank(parentId)){
                 if (parentId.equals(id)) {
                     //递归查询当前子菜单的子菜单
                     List<MenuVo> iterateMenu = iterateMenus(menuVos,menuId);
                     vo.setVos(iterateMenu);
                     result.add(vo);
                 }
            }
        });
        return result;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值