java實現多級菜單的(de)方法

2019-09-10

java實現多級菜單的(de)方法
在網站開發的(de)時候我們會對網站的(de)欄目進行分類,一(yī)個欄目可(kě)以有多個子(zǐ)分類,一(yī)個子(zǐ)分類又可(kě)以有分裂
1,查詢菜單樹:

public List<Map<String, Object>> queryCategoryInfo() {
List<Map<String, Object>> allMenu = queryAllCategory();
     //根節點
     List<Map<String, Object>> rootMenu = new ArrayList<Map<String, Object>>();
     for (Map<String, Object> nav : allMenu) {
    String parentId = String.valueOf(nav.get("parent_id"));
       if(parentId.equals("0")){//父節點是0的(de),為(wèi)根節點。
         rootMenu.add(nav);
       }
     }
     /* 根據Menu類的(de)order排序 */
//      Collections.sort(rootMenu, order());
     //為(wèi)根菜單設置子(zǐ)菜單,getClild是遞歸調用的(de)
     for (Map<String, Object> nav : rootMenu) {
       /* 獲取根節點下的(de)所有子(zǐ)節點 使用getChild方法*/
    String id = String.valueOf(nav.get("category_id"));
       List<Map<String, Object>> childList = getChild(id, allMenu);
//        nav.setChildren(childList);//給根節點設置子(zǐ)節點
       nav.put("child", childList);
     }


return rootMenu;
}

Java (1).jpg 


/**
* 獲取子(zǐ)節點
* @param id 父節點id
* @param allMenu 所有菜單列表
* @return 每個根節點下,所有子(zǐ)菜單列表
*/
private List<Map<String, Object>> getChild(String id,List<Map<String, Object>> allMenu){
   //子(zǐ)菜單
List<Map<String, Object>> childList = new ArrayList<Map<String, Object>>();
for (Map<String, Object> nav : allMenu) {
// 遍曆所有節點,将所有菜單的(de)父id與傳過來的(de)根節點的(de)id比較
//相等說明:為(wèi)該根節點的(de)子(zǐ)節點。
String parentId = String.valueOf(nav.get("parent_id"));
if(id.equals(parentId)){
childList.add(nav);
}
}
//遞歸
for (Map<String, Object> nav : childList) {
String tempId = String.valueOf(nav.get("category_id"));
//nav.setChildren(,getChild(tempId, allMenu));
nav.put("child", getChild(tempId, allMenu));
}
//Collections.sort(childList,order());//排序
//如(rú)果節點下沒有子(zǐ)節點,返回一(yī)個空List(遞歸退出)
   if(childList.size() == 0){
     return new ArrayList<Map<String, Object>>();
   }
   return childList;
}

 

what-is-java-java-programming-tu.jpg


2,Java 集合 之 List 多級菜單;

package com.menu;
 
import java.util.List;
 
public class TestCategory
{
public static String level="";

public static void main(String[] args)
{
MenuManager mm=new MenuManager();
mm.add(new Menu(0,-1,"主控管理(lǐ)系統"));
mm.add(new Menu(100,0,"主控管理(lǐ)"));
mm.add(new Menu(101,0,"公共信息"));
mm.add(new Menu(102,0,"本單位管理(lǐ)"));
mm.add(new Menu(103,0,"下屬管理(lǐ)"));
mm.add(new Menu(104,0,"部門管理(lǐ)"));
mm.add(new Menu(105,0,"職位管理(lǐ)"));
mm.add(new Menu(10000,104,"部門類别"));
mm.add(new Menu(10001,104,"部門信息"));

List<Menu> menuList=mm.getMenuList();
for(int i=0;i<menuList.size();i++)
{
Menu menu=menuList.get(i);
if(menu.getPid()==-1)
{
System.out.println(menu.getName());
showMenu(menu,menuList);
break;
}
}

}

public static void showMenu(Menu parentMenu,List<Menu> menuList)
{
level+="----";
for(int i=0;i<menuList.size();i++)
{
Menu menu=menuList.get(i);
if(menu.getPid()==parentMenu.getId())
{
System.out.println(level+menu.getName());
showMenu(menu,menuList);
}
}
level=level.substring(0,level.length()-4);
}
}
 
 
 
 
 
package com.menu;
 
public class Menu
{
private int id;
private int pid;
private String name;

public Menu(int id, int pid, String name)
{
super();
this.id = id;
this.pid = pid;
this.name = name;
}
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public int getPid()
{
return pid;
}
public void setPid(int pid)
{
this.pid = pid;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}


}
 
 
 
 
 
package com.menu;
 
import java.util.ArrayList;
import java.util.List;
 
public class MenuManager
{
private List<Menu> menuList=new ArrayList<Menu>();

public void add(Menu menu)
{
menuList.add(menu);
}
 
public List<Menu> getMenuList()
{
return menuList;
}
 
public void setMenuList(List<Menu> menuList)
{
this.menuList = menuList;
}


}

責任編輯:中山網站建設
 【網訊網絡】國(guó)家高(gāo)新技術企業》十年(nián)專注軟件開發,網站建設,網頁設計,APP開發,小程序,微信公衆号開發,定制各類企業管理(lǐ)軟件(OA、CRM、ERP、訂單管理(lǐ)系統、進銷存管理(lǐ)軟件等)!服務熱線:0760-88610046、13924923903,http://www.wansion.net

您的(de)項目需求咨詢熱線:0760-88610046(國(guó)家高(gāo)新技術企業)

*請認真填寫需求,我們會在24小時內(nèi)與您取得聯系。