zoukankan      html  css  js  c++  java
  • 简洁常用权限系统的设计与实现(七):一种错误的不可行的构造树的方法

     前面介绍了4种方法(实质是3种),构造树。

      在此,需要特别说明的是,那些都是成功的、漂亮的方法和案例 ,但实际上在解决问题的过程中,有很多其它的尝试。
    比如本篇介绍的方法,就是不可行的。
      想说明一个道理,在走向成功的道路上,会经历很多不算太成功的事情。

       我们在前面的例子中,用递归计算子结点的深度level。但实际上,我最开始想到的一种方法正好反过来了。

      思路:最底层的节点level为1,如果当前节点有父结点,就把自己的level+1,递归把自己的父结点的level+1.

      
    // 计算所有节点的level
    public static List<Map<String, Object>> caculateLevelWrong(
    List<Map<String, Object>> privilegeList) {
    List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
    resultList.addAll(privilegeList);
    //默认所有的节点level为1
    for (Map<String, Object> p : resultList) {
    p.put("level", 1);
    }
    List<Map<String, Object>> topLevelList =  TreeMenuUtil.findTopLevelNodeList(privilegeList);
    for (Map<String, Object> p : topLevelList) {
    child(privilegeList, p);
    }
    return privilegeList;
    }

    private static void child(List<Map<String, Object>> list,
    Map<String, Object> p) {
    List<Map<String, Object>> childList = TreeMenuUtil.findAllChild(p,
    list);
    if (childList != null && childList.size() > 0) {
    levelPlus(p);
    parentPlusOne(p, list);
    }
    // 无法保证多个子结点,都有子结点的时候,他们的父结点,重复增加了level,而重复计算的次数很难去统计
    for (Map<String, Object> child : childList) {
    child(list, child);
    }
    }

      这种方法,
    计算所有节点的level,可能会存在重复计算的情况。最下级的节点的level为1,与其它地方的定义不同。
    为了解决重复计算的问题,我想到了把计算过的节点,维护下,防止重复计算,但是没有找到好的方法。

      刚刚突然想到,既然从顶层到底层,计算level,是可行的。按说,从下至上计算level也是可以的。
    这种方法,就不去尝试了,有兴趣的可以去试试。

      方法已经有3种以上了,各有利弊,暂时就写到这吧。

      等过段时间,权限系统有了新的进展之后,再继续...

      To be continued... 
    原文首发:http://fansunion.cn/article/detail/575.html
  • 相关阅读:
    Jquery中的this指向的是哪个对象?
    需要重新编辑
    关于CSS选择器优先级无冲突样式设置的展示
    在 CSS 中,width 和 height 指的是内容区域的宽度和高度
    关于正则表达式中分组的一些误解勘正以及String的replaceAll方法误解勘正
    关于informatica的Dynamic Lookup组件使用中遇到的一个问题的思考
    【转】Informatica Update 机制详解
    维度表和事实表的含义
    今天看IO流,复制word遇到的一个小问题
    小试下新博客,一个列传行的SQL
  • 原文地址:https://www.cnblogs.com/qitian1/p/6463011.html
Copyright © 2011-2022 走看看