0
点赞
收藏
分享

微信扫一扫

简洁常用权限系统的设计与实现(七):一种错误的不可行的构造树的方法


方法( 实质是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... 


举报

相关推荐

0 条评论