java递归树形菜单显示

 

 

今天写权限整好涉及到一些菜单的显示,最先想到的是递归遍历输出,但是呢在网上找了很多有关的资料没有符合自己需求的所以就自己写了一个,如果觉得靠谱

请点点关注!!!赞一个

首先看一些设计的数据库设计

菜单的id menuId

菜单的名称 menuName

菜单的地址 url

菜单的父级别 parent

菜单的编码 menuCode

比较简单的设计:

闲话不多说直接上代码

实体类 如下:

此处省略 GET ()SET()方法

注意:

这里多了个 childrs集合 因为我们要进行递归遍历 把每个菜单的子元素都显示出来  根据自己的需求选好集合我用的是List如果你希望唯一就用set集合

这里采用List

接下来我们来看递归部分如下:

简单的几行代码就完成的递归的遍历所有菜单的 每个菜单又会携带自己的子子孙孙菜单的 这样的结果是你想到要的么????

接下来我们来解释一下这些代码的意义

menuMapper.conditionleveMenu(menu.getMenuId());

第一次进来,获取的是当前的一级元素

然后把一级元素放入我当前菜单的子元素中

因为:我的子元素的下面很有可能还有子元素 所以我又把上面的集合元素循环的进行的遍历

for(Menu men : list){

然后这里采用的是递归的算法 recursion(menu)传入当前的菜单

}

这个方法主要做了几件事

1查询当前菜单下面的所有子元素菜单

2如果有子元素菜单 添加到当前菜单的子元素集合中

添加完毕 我们要考虑的是万一子元素集合下面还有菜单元素怎么办

所以进行了遍历

3循环遍历子元素集合进行重复操作 放入菜单 然后进入方法

1查询当前菜单下面的所有子元素

2如果有子元素菜单 添加到当期那菜单的子元素集合中

3循环遍历子元素集合进行进行重复操作.......同上

 

直到循环完毕

 

主要代码 就是这些  最重要的是实现了这个功能  细节留给你们开阔大脑去想把!!嘿嘿 关于本文有什么问题可以在下面留言交流,如果您觉得本文对您有帮助,可以点击下面的 推荐 支持一下我,博客一直在更新,欢迎 关注

 

 

 

 

查询数据库中的全量数据进行操作

 public static  Menu menuToTree(Menu menu, List<Menu> menuAllList) {
        if (null == menuAllList || menuAllList.size() <= 0) {
            throw new IllegalArgumentException("数据来源不能为空");
        }
        if (null == menu) {
            //首次获取顶级菜单
            menu = new Menu();
            for (Menu item : menuAllList) {
                if (item.getParentId() == 0) {
                    menu.getChildren().add(item);
                }
            }
        }
        //当前菜单的子菜单集合  9个子菜单
        List<Menu> current = menu.getChildren();
        if (null != current) {//如果9个菜单不为空
            for (Menu itemx : current) {//遍历9个子菜单
                System.out.println("{当前节点"+itemx.getId()+" 遍历开始 ");
                for (Menu itemj : menuAllList) {
                    if (itemx.getId() == itemj.getParentId()) {//如果你的父级等于我 那么你就是我的子菜单之一
                        System.out.println("当前父级节点="+itemx.getId()+" 子级节点="+itemj.getId());
                        itemx.getChildren().add(itemj);//把你保存在我的子菜单当中

                    }
                }
                menuToTree(itemx, menuAllList);
                System.out.println("当前节点"+itemx.getId()+" 遍历结束 }");
            }
        }
        return menu;
    }
 menuToTree(null,全量数据)

 

posted @ 2018-02-05 20:14  郎小乐  阅读(411)  评论(0)    收藏  举报