以这种方式。和第三的类似介绍。
所不同的是。深度未在数据库中存储节点level,添加和更改时间,护。
而是,在程序中,实时去计算的。

至于后面的,依照level升序排序,再迭代全部的节点构造树,与第三篇中的方法,全然一样。
因此,本篇和下一篇,仅仅介绍怎样计算level。不再介绍后面的详细实现了。

计算level,採用递归方式。

// 计算全部节点的level
public static List<Map<String, Object>> caculateLevel(
List<Map<String, Object>> list) {
//从全部节点中。找出全部的顶级节点
List<Map<String, Object>> topLevelList = TreeMenuUtil.findTopLevelNodeList(list);
//遍历顶级节点
for (Map<String, Object> top : topLevelList) {
//顶级节点的level为1
level = 1;
top.put("level", level);
//为每个顶级节点,构造子结点树
child(list, top);
}
return list;
} //为当前节点,构造子结点,再构造子结点的子结点
private static void child(List<Map<String, Object>> list,
Map<String, Object> parent) {
//找出一个节点的全部一级子结点
List<Map<String, Object>> childList = TreeMenuUtil.findAllChild(parent, list);
//遍历子结点
for (Map<String, Object> child : childList) {
//深度+1
level++;
child.put("level", level);
child(list, child);
//回退。深度-1
level--;
}
}

原文首发:http://fansunion.cn/article/detail/573.html

版权声明:本文博客原创文章,博客,未经同意,不得转载。

设计与实现的简单和经常使用的权限系统(五岁以下儿童):不维护节点的深度level,手工计算level,树形结构的更多相关文章

  1. 设计与实现简单而经常使用的权限系统(四):无需维护level,递归构建树

    第三篇中.我们通过维护节点的深度level,通过迭代全部的节点,仅仅须要一次,就构造了树.  本篇.换一种方式. 优点是:不维护节点的深度level,添加和改动节点时,也不用维护.递归实现,代码比較清 ...

  2. Android设计模式(五岁以下儿童)--简单工厂模式

    1.面试的时候问这个问题: 在ListView 的item小程序.很多不同的显示风格.或者是,为了更好地维护,不同的样式,应该怎么做? 我一下就想到的是工厂的模式,利用project,编写ViewFa ...

  3. 简洁常用权限系统的设计与实现(六):不维护节点的深度level,手动计算level,构造树 (把一颗无序的树,变成有序的)

     本篇介绍的方法,参考了网上的代码.在递归过程中,计算level,是受到了这种方法的启发. CSDN上有篇关于树的算法,目标是把一个无序的树,变成有序的. 我看了下代码,并运行了下,感觉是可行的. 我 ...

  4. 简洁常用权限系统的设计与实现(五):不维护节点的深度level,手动计算level,构造树

     这种方式,与第三篇中介绍的类似.不同的是,数据库中不存储节点的深度level,增加和修改时,也不用维护.而是,在程序中,实时去计算的. 至于后面的,按照level升序排序,再迭代所有的节点构造树,与 ...

  5. Android 设计随便说说之简单实践(合理组合)

    上一篇(Android 设计随便说说之简单实践(模块划分))例举了应用商店设计来说明怎么做模块划分.模块划分主要依赖于第一是业务需求,具体是怎么样的业务.应用商店则包括两个业务,就是向用户展示appl ...

  6. OC中使用UI自己定义控件实现计算器的设计(版本号1简单的加减乘除,连加,连减,连除,连乘)

    OC中使用UI自己定义控件实现计算器的设计(版本号1简单的加减乘除,连加.连减,连除,连乘) #import <UIKit/UIKit.h> @interface ViewControll ...

  7. YbSoftwareFactory 代码生成插件【十八】:树形结构下的查询排序的数据库设计

    树形结构的排序在中国特色下十分普遍也非常重要,例如常说的五大班子,党委>人大>政府>政协>纪委,每个班子下还有部门,岗位,人员,最终排列的顺序通常需要按权力大小.重要性等进行排 ...

  8. 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面

    [Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...

  9. “权限系统_基于HUI”的简单介绍和交流

    昂,最近比较闲,写了个权限系统. 后端框架还是老样子,基于本人自己搭建的后台基础开发框架"Spring_Mvc_EF":前端框架,我挑选了一阵子,最后选用了HUI前端开发框架,因为 ...

随机推荐

  1. Android 实现蘑菇街购物车动画效果

    版本号:1.0  日期:2014.8.6 版权:© 2014 kince 转载注明出处   使用过蘑菇街的用户基本上都知道有一个增加购物车的动画效果,此处不详细描写叙述想知道的能够去下载体验一下. 1 ...

  2. Debian 7设备nginx周围环境、编译并安装和启动

    /*********************************************************************  * Author  : Samson  * Date   ...

  3. openstack 网络架构 nova-network + neutron

    openstack网络架构(nova-network/neutron) openstack网络体系中,网络技术没有创新,但用到的技术点很庞杂,包含bridge.vlan.gre.vxlan.ovs.o ...

  4. 对“demo!demo.Index+HookProc::Invoke”垃圾收集的类型已委托回调。这可能会导致应用程序崩溃、损坏和数据丢失。当传递委托给非托管代码,托管应用程序必须让这些委托保持活着

    对"demo!demo.Index+HookProc::Invoke"垃圾收集的类型已委托回调.这可能会导致应用程序崩溃.损坏和数据丢失.当传递委托给非托管代码,托管应用程序必须承 ...

  5. JavaEE(13) - JPA属性映射

    1. 映射实体的属性 #1. 使用@Transient修饰不想持久保存的Field #2. 使用@Enumerated修饰枚举类型的Field #3. 使用@Lob, @Basic修饰枚举类型的Fie ...

  6. 2014年辛星全然解读html第八节

    经过前面七节的学习,我感觉大家的HTML的功底也差点儿相同了,并且我特别的删去了某些东西,比方框架,假设回到几年前,那么框架是很流行的,可是如今都到了2014年了,这些东西早就该被遗忘了,因此,我果断 ...

  7. 《Java并发编程实战》第十三章 显示锁 读书笔记

    一.Lock与 ReentrantLock Lock 提供一种无条件的.可轮询的.定时的.可中断的锁获取操作,全部加锁和解锁的方法都是显式的. public interface Lock { void ...

  8. thinkphp学习笔记9—自动加载

    原文:thinkphp学习笔记9-自动加载 1.命名空间自动加载 在3.2版本中不需要手动加载类库文件,可以很方便的完成自动加载. 系统可以根据类的命名空间自动定位到类库文件,例如定义了一个类Org\ ...

  9. 大数据系列修炼-Scala课程03

    前言 今天上班看了很多关于前端js,jQuery.bootstrap.js以及springMVC看得迷迷糊糊的,毕竟以前很少去学习前端的技术,所有看得有点困,还好看得比较多,回家后也开始学习关于Sca ...

  10. 140724夏训.txt

    1.同余定理    (a+b)%c==(a%c+b%c)%c    (a*b)%c==[(a%c)*(b%c)]%c          由于有的数在int范围内,可是两个的乘积却超过了int范围,这样 ...