最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java構(gòu)建樹形菜單的實(shí)例代碼(支持多級菜單)

 更新時(shí)間:2017年09月04日 10:50:16   作者:隨便。  
這篇文章主要介紹了Java構(gòu)建樹形菜單的實(shí)例代碼(支持多級菜單),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

效果圖:支持多級菜單。

菜單實(shí)體類:

public class Menu {
  // 菜單id
  private String id;
  // 菜單名稱
  private String name;
  // 父菜單id
  private String parentId;
  // 菜單url
  private String url;
  // 菜單圖標(biāo)
  private String icon;
  // 菜單順序
  private int order;
  // 子菜單
  private List<Menu> children;
  // ... 省去getter和setter方法以及toString方法
}

菜單一般需要排序,我們根據(jù)Menu的order字段進(jìn)行排序:

 /*
   * 排序,根據(jù)order排序
   */
  public Comparator<Menu> order(){
    Comparator<Menu> comparator = new Comparator<Menu>() {
      @Override
      public int compare(Menu o1, Menu o2) {
        if(o1.getOrder() != o2.getOrder()){
          return o1.getOrder() - o2.getOrder();
        }
        return 0;
      }
    };
    return comparator;
  }

生成樹的方法:

public Map<String,Object> findTree(){
  Map<String,Object> data = new HashMap<String,Object>();
    try {//查詢所有菜單
      List<Menu> allMenu = menuDao.findTree();
      //根節(jié)點(diǎn)
      List<Menu> rootMenu = new ArrayList<Menu>();
      for (Menu nav : allMenu) {
        if(nav.getParentId().equals("0")){//父節(jié)點(diǎn)是0的,為根節(jié)點(diǎn)。
          rootMenu.add(nav);
        }
      }
      /* 根據(jù)Menu類的order排序 */
      Collections.sort(rootMenu, order());
      //為根菜單設(shè)置子菜單,getClild是遞歸調(diào)用的
      for (Menu nav : rootMenu) {
        /* 獲取根節(jié)點(diǎn)下的所有子節(jié)點(diǎn) 使用getChild方法*/
        List<Menu> childList = getChild(nav.getId(), allMenu);
        nav.setChildren(childList);//給根節(jié)點(diǎn)設(shè)置子節(jié)點(diǎn)
      }
      /**
       * 輸出構(gòu)建好的菜單數(shù)據(jù)。
       * 
       */
      data.put("success", "true");
      data.put("list", rootMenu);
      return data;
    } catch (Exception e) {
      data.put("success", "false");
      data.put("list", new ArrayList());
      return data;
    }
  }

獲取子菜單:

/**
   * 獲取子節(jié)點(diǎn)
   * @param id 父節(jié)點(diǎn)id
   * @param allMenu 所有菜單列表
   * @return 每個(gè)根節(jié)點(diǎn)下,所有子菜單列表
   */
  public List<Menu> getChild(String id,List<Menu> allMenu){
    //子菜單
    List<Menu> childList = new ArrayList<Menu>();
    for (Menu nav : allMenu) {
      // 遍歷所有節(jié)點(diǎn),將所有菜單的父id與傳過來的根節(jié)點(diǎn)的id比較
      //相等說明:為該根節(jié)點(diǎn)的子節(jié)點(diǎn)。
      if(nav.ParentId().equals(id)){
        childList.add(nav);
      }
    }
    //遞歸
    for (Menu nav : childList) {
      nav.setChildren(getChild(nav.getId(), allMenu));
    }
    Collections.sort(childList,order());//排序
    //如果節(jié)點(diǎn)下沒有子節(jié)點(diǎn),返回一個(gè)空List(遞歸退出)
    if(childList.size() == 0){
      return new ArrayList<Menu>();
    }
    return childList;
  }

最后返回的JSON串如下:

{
 "success": "true",
 "list": [
   {
    "id": "1",
    "name": "Java",
    "parentid": "0",
    "url": "http://www.aliouchen.com",
    "order": 1,
    "children": [
     {
       "id": "2",
       "name": "并發(fā)編程",
       "parentid": "1",
       "url": "http://www.aliouchen.com",
       "order": 1,
       "children": []
     },
     {
       "id": "3",
       "name": "多線程",
       "parentid": "1",
       "url": "http://www.aliouchen.com",
       "order": 2,
       "children": [
         "id": "4",
         "name": "Thread",
         "parentid": "3",
         "url": "http://www.aliouchen.com",
         "order": 1,
          "children":[]
       ]
     }
    ]
   },
   {
    "id": "5",
    "name": "Python",
    "parentid": "0",
    "url": "http://www.aliouchen.com",
    "order": 2,
    "children": []
   }
  ]
}

總結(jié)

以上所述是小編給大家介紹的Java構(gòu)建樹形菜單的實(shí)例代碼(支持多級菜單),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • SpringMVC常用注解載入與處理方式詳解

    SpringMVC常用注解載入與處理方式詳解

    這篇文章主要介紹了SpringMVC常用注解載入的方式和處理的方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Java 利用枚舉實(shí)現(xiàn)接口進(jìn)行統(tǒng)一管理

    Java 利用枚舉實(shí)現(xiàn)接口進(jìn)行統(tǒng)一管理

    這篇文章主要介紹了Java 利用枚舉實(shí)現(xiàn)接口進(jìn)行統(tǒng)一管理,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • SpringBoot中MyBatis-Plus 查詢時(shí)排除某些字段的操作方法

    SpringBoot中MyBatis-Plus 查詢時(shí)排除某些字段的操作方法

    這篇文章主要介紹了SpringBoot中MyBatis-Plus 查詢時(shí)排除某些字段的操作方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Java中ArrayList集合的常用方法大全

    Java中ArrayList集合的常用方法大全

    這篇文章主要給大家介紹了關(guān)于Java中ArrayList集合的常用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Springboot教程之如何設(shè)置springboot熱重啟

    Springboot教程之如何設(shè)置springboot熱重啟

    這篇文章主要介紹了Springboot教程之如何設(shè)置springboot熱重啟,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • SpringCloud修改Feign日志記錄級別過程淺析

    SpringCloud修改Feign日志記錄級別過程淺析

    OpenFeign源于Netflix的Feign,是http通信的客戶端。屏蔽了網(wǎng)絡(luò)通信的細(xì)節(jié),直接面向接口的方式開發(fā),讓開發(fā)者感知不到網(wǎng)絡(luò)通信細(xì)節(jié)。所有遠(yuǎn)程調(diào)用,都像調(diào)用本地方法一樣完成
    2023-02-02
  • Java線程安全中的原子性淺析

    Java線程安全中的原子性淺析

    這篇文章主要介紹了Java線程安全中的原子性,原子性是指一條線程在執(zhí)行一系列程序指令操作時(shí),該線程不可中斷。一旦出現(xiàn)中斷,那么就可能會導(dǎo)致程序執(zhí)行前后的結(jié)果不一致
    2023-02-02
  • java題解LeetCode454.四數(shù)相加示例

    java題解LeetCode454.四數(shù)相加示例

    這篇文章主要為大家介紹了java題解LeetCode454.四數(shù)相加示例思路解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • java泛型的局限探究及知識點(diǎn)總結(jié)

    java泛型的局限探究及知識點(diǎn)總結(jié)

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于java泛型的局限探究及知識點(diǎn)總結(jié)內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)參考下。
    2021-07-07
  • Java設(shè)計(jì)模式之建造者模式實(shí)例詳解

    Java設(shè)計(jì)模式之建造者模式實(shí)例詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之建造者模式,結(jié)合具體實(shí)例形式分析了建造者模式的概念、原理、實(shí)現(xiàn)方法與相關(guān)使用注意事項(xiàng),需要的朋友可以參考下
    2017-09-09

最新評論

静宁县| 林甸县| 南漳县| 吉安市| 长子县| 探索| 遂溪县| 崇明县| 北碚区| 山东| 定陶县| 恩施市| 黄石市| 洛扎县| 祁连县| 泾阳县| 咸宁市| 秦皇岛市| 伊吾县| 贵南县| 台安县| 瑞昌市| 镇雄县| 洪江市| 成都市| 大冶市| 乐业县| 通渭县| 抚顺市| 贵德县| 浠水县| 长岛县| 丹东市| 普宁市| 治多县| 锦屏县| 临湘市| 论坛| 利辛县| 子长县| 台安县|