1、功能
在spring boot开发前后端分离项目时,前端要求菜单的结构如下
2、处理代码
import com.alibaba.fastjson.JSONObject;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
/**
* 菜单树
* 只要调用 menuRoot 方法并传入菜单列表
*
* 菜单列表要求:
* 1、菜单必须有menu_id(菜单id) 和 menu_superior(父菜单id)
* 2、root菜单的 父菜单id 是 0
*/
public class MenuTree {
/**
* @param listMenu 菜单列表
* @return
*/
public static final List menuRoot(List<JSONObject> listMenu){
Iterator<JSONObject> rootIterator = listMenu.iterator();
List<JSONObject> Menu = new LinkedList<>();
//处理根目录
while(rootIterator.hasNext()){
JSONObject menu = rootIterator.next();
if ((int)menu.get("menu_superior") == 0){
//去除根菜单
rootIterator.remove();
Menu.add(menu);
}
}
menuFor(Menu, listMenu);
return Menu;
}
/**
*
* @param listMenu 子菜单列表
* @param rootMenu 父菜单列表
*/
public static final void menuChild(List<JSONObject> listMenu,JSONObject rootMenu){
Iterator<JSONObject> iterator = listMenu.iterator();
List<JSONObject> childMenu = new LinkedList<>();
while(iterator.hasNext()) {
JSONObject child = iterator.next();
if (child.get("menu_superior") == rootMenu.get("menu_id")){
if (!rootMenu.containsKey("child")){
rootMenu.put("child",new LinkedList<>());
List child1 = (List)rootMenu.get("child");
child1.add(child);
iterator.remove();
}else {
List child1 = (List)rootMenu.get("child");
child1.add(child);
iterator.remove();
}
childMenu.add(child);
}
}
menuFor(childMenu, listMenu);
}
public static final void menuFor(List<JSONObject> Menu,List<JSONObject> listMenu){
for (JSONObject rootMenu : Menu) {
menuChild(listMenu,rootMenu);
}
}
}