java后台利用递归生成菜单二叉树

由于最近项目用到了菜单树,所以记录一下,项目用的是hibernate

菜单类定义如下:

public class Menu {
    // 菜单id
    private String id;
    // 父菜单
    private Menu parent;
    // 菜单名称
    private String name;
    // 菜单代码
    private String code;
    // 菜单url
    private String url;
    // 备注
    private String description;
    // 排序
    private Integer sort;
    //子菜单
    private List<Menu> children;
    // ... 省去getter和setter方法以及toString方法
}

利用递归实现二叉树:

public List<Menu> getMenu() {
    List<Menu> menus= menuService.findAllMenu();    //查询出所有的菜单
    if(menus != null && menus.size() > 0) {
        List<Menu> result = new ArrayList<>();
        for(Menu menu : menus) {
            // 判断是否是父菜单
            if(menu != null && StringUtils.isBlank(menu.getParent().getId())) {
                menu.setChildren(getChildrenMenu(menu.getId(), menus))
            }
        }
    }
    return menus;
}

// 获取子节点的递归方法
public List<Menu> getChildrenMenu(String id, List<Menu> menuList) {
    List<Menu> lists = new ArrayList<>();
        if (menuList!= null && menuList.size() > 0) {
            for (Menu menu: menuList) {
                if (id.equals(menu.getParentId())) {
                    // 递归获取子节点
                    menu.setChildren(getChildrenMenu(menu.getId(), menuList));
                    lists.add(menu);
                }
            }
        }
    return lists;
}

服务器端返回该树的所有数据。客户端通过js控制菜单的展开与折叠。 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值