JAVA遞歸生成樹形菜單

  遞歸生成一個如圖的菜單,編寫兩個類數據模型Menu、和建立樹形的MenuTree。經過如下過程實現:html

    1.首先從菜單數據中獲取全部根節點。java

    2.爲根節點創建次級子樹並拼接上。json

    3.遞歸爲子節點創建次級子樹並接上,直至爲末端節點拼接上空的「樹」。ui

  首先,編寫數據模型Menu。每條菜單有本身的id、父節點parentId、菜單名稱text、菜單還擁有次級菜單children。this

 1 import java.util.List;
 2 
 3 public class Menu {
 4     private String id;
 5     private String parentId;
 6     private String text;
 7     private String url;
 8     private String yxbz;
 9     private List<Menu> children;     
10     public Menu(String id,String parentId,String text,String url,String yxbz) {
11         this.id=id;
12         this.parentId=parentId;
13         this.text=text;
14         this.url=url;
15         this.yxbz=yxbz;   
16     }
17         /*省略get\set*/  
18 }

 

  建立樹形結構的類MenuTree。方法getRootNode獲取全部根節點,方法builTree將根節點彙總建立樹形結構,buildChilTree爲節點創建次級樹並拼接上當前樹,遞歸調用buildChilTree不斷爲當前樹開枝散葉直至找不到新的子樹。完成遞歸,獲取樹形結構。url

 

 1 import java.util.ArrayList;
 2 import java.util.List;
 3 
 4 public class MenuTree {
 5     private List<Menu> menuList = new ArrayList<Menu>();
 6     public MenuTree(List<Menu> menuList) {
 7         this.menuList=menuList;
 8     }
 9 
10     //創建樹形結構
11     public List<Menu> builTree(){
12         List<Menu> treeMenus =new  ArrayList<Menu>();
13         for(Menu menuNode : getRootNode()) {
14             menuNode=buildChilTree(menuNode);
15             treeMenus.add(menuNode);
16         }
17         return treeMenus;
18     }
19 
20     //遞歸,創建子樹形結構
21     private Menu buildChilTree(Menu pNode){
22         List<Menu> chilMenus =new  ArrayList<Menu>();
23         for(Menu menuNode : menuList) {
24             if(menuNode.getParentId().equals(pNode.getId())) {
25                 chilMenus.add(buildChilTree(menuNode));
26             }
27         }
28         pNode.setChildren(chilMenus);
29         return pNode;
30     }
31 
32     //獲取根節點
33     private List<Menu> getRootNode() {         
34         List<Menu> rootMenuLists =new  ArrayList<Menu>();
35         for(Menu menuNode : menuList) {
36             if(menuNode.getParentId().equals("0")) {
37                 rootMenuLists.add(menuNode);
38             }
39         }
40         return rootMenuLists;
41     }
42 }

 

  最後,插入一些數據試試效果。獲得的json就能夠生成圖一菜單了。spa

 1 import java.util.ArrayList;
 2 import java.util.List;
 3 import com.alibaba.fastjson.JSON;
 4 
 5 public class Hello {
 6     public static void main(String []args) {
 7         List<Menu>  menuList= new ArrayList<Menu>();
 8         /*插入一些數據*/
 9         menuList.add(new Menu("GN001D000","0","系統管理","/admin","Y"));
10         menuList.add(new Menu("GN001D100","GN001D000","權限管理","/admin","Y"));
11         menuList.add(new Menu("GN001D110","GN001D100","密碼修改","/admin","Y"));
12         menuList.add(new Menu("GN001D120","GN001D100","新加用戶","/admin","Y"));
13         menuList.add(new Menu("GN001D200","GN001D000","系統監控","/admin","Y"));
14         menuList.add(new Menu("GN001D210","GN001D200","在線用戶","/admin","Y"));
15         menuList.add(new Menu("GN002D000","0","訂閱區","/admin","Y"));
16         menuList.add(new Menu("GN003D000","0","未知領域","/admin","Y"));
17         /*讓咱們建立樹*/
18         MenuTree menuTree =new MenuTree(menuList);
19         menuList=menuTree.builTree();
20         /*轉爲json看看效果*/
21         String jsonOutput= JSON.toJSONString(menuList);
22         System.out.println(jsonOutput);
23     }
24 }

@luqp 本文地址:http://www.javashuo.com/article/p-pacngpfw-bg.htmlcode

相關文章
相關標籤/搜索