• 多级菜单无限递归


    public Map<String, Object> findAll(HttpServletRequest request) {
    Map<String, Object> rs = new HashMap<String, Object>();

    List<Map<String, Object>> articleTypeList = articleTypeDao.findAllMap();
    List<Map<String, Object>> loadChildArticleType = this.loadChildArticleType(articleTypeList, 1);


    return rs;
    }

    /**
    * 递归聚合
    */
    private List<Map<String, Object>> loadChildArticleType(List<Map<String, Object>> allList, int level) {
    if (allList == null || allList.isEmpty() || level == 0) {
    return allList;
    }
    List<Map<String, Object>> mainList = new ArrayList<>();
    List<Map<String, Object>> childList = new ArrayList<>();
    for (Map<String, Object> item : allList) {
    if (toInteger(item.get("level")) == level) {
    mainList.add(item);
    } else if (toInteger(item.get("level")) == level + 1) {
    childList.add(item);
    }
    }
    allList.removeAll(mainList);
    if (!childList.isEmpty()) {
    childList = this.loadChildArticleType(allList, toInteger(childList.get(0).get("level")));
    }
    for (Map<String, Object> main : mainList) {
    for (Map<String, Object> child : childList) {
    if (child.get("upperId").equals(main.get("id"))) {
    List<Map<String, Object>> typeList;
    if (main.get("childTypeList") == null) {
    typeList = new ArrayList<>();
    } else {
    typeList = (List<Map<String, Object>>) main.get("childTypeList");
    }
    typeList.add(child);
    main.put("childTypeList", typeList);
    }
    }
    }
    return mainList;
    }

    实体字段

    private Long id; 主键
    private Long upperId; 上级id
    private int level; 第几极

  • 相关阅读:
    【CLR Via C#】2 程序集
    值类型与引用类型
    .Net Framework简介
    【CLR Via C#】15 枚举类型与位类型
    Dictionary的用法及用途
    枚举
    GitExtensions使用教程
    Bootstrap如何禁止响应式布局
    【StyleCop】StyleCop规则汇总
    优化SQL查询:如何写出高性能SQL语句
  • 原文地址:https://www.cnblogs.com/laixin09/p/10006038.html
Copyright © 2020-2023  润新知