菜单的分级实现需要在实体类中加入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;
以上是三级菜单的实现。如果需要更多的级别,建议使用递归。