树形结构(三级,无递归)

菜单的分级实现需要在实体类中加入pid(父ID)和List<实体类> list=new ArrayList<实体类>()(用于存放该菜单的子菜单)+数据库的表中增加父ID字段。

实现原理:数据库中的子菜单的父ID就是父菜单的ID,将需要的菜单(不论级数)全部取出存放到集合A中。同时在Java代码中新建一个容器称为集合B。先将集合A中所有父ID是0的存放到集合B中(一级菜单生成)。循环集合B中的一级菜单。将集合A中所有父ID与集合B中的菜单的ID相等菜单添加到对应菜单的底下(二级菜单)。循环集合B中的二级菜单。将集合A中所有父ID与集合B中的菜单的ID相等菜单添加到对应菜单的底下(三级菜单)。

        //数据库取出全部菜单
        List<Activity> activity = activityService.findActivitysByType(type);
        //创建新的容器(用于存放菜单)
        List<Activity> list = new ArrayList<Activity>();
        //取出一级菜单放入容器
        for (int i = 0; i < activity.size(); i++) {
            //一级菜单
            System.out.println("父iD:" + activity.get(i).getPid());
            if (activity.get(i).getPid().equals("0")) {
                //父级ID=0,将菜单放入list容器中
                list.add(activity.get(i));
            }
        }

        //二级
        for (int i = 0; i < activity.size(); i++) {
            for (int j = 0; j < list.size(); j++) {
                //找到对应的父ID
                if (activity.get(i).getPid().equals(list.get(j).getId())) {
                    //找到对应父ID。加入list中某一项对象底下的list
                    list.get(j).getList().add(activity.get(i));
                }
            }
        }
        //三级
        for (int i = 0; i < list.size(); i++) {
            for (int j = 0; j < list.get(i).getList().size(); j++) {
                //找到对应的父ID
                for (int k = 0; k < activity.size(); k++) {
                    if (activity.get(k).getPid().equals(list.get(i).getList().get(j).getId())) {
                        //找到对应父ID。加入list中某一项对象底下的list
                        list.get(i).getList().get(j).getList().add(activity.get(k));
                    }
                }
            }
        }
        return list;

以上是三级菜单的实现。如果需要更多的级别,建议使用递归。

猜你喜欢

转载自blog.csdn.net/IT_Java_Roy/article/details/88667312
今日推荐