以这种方式。和第三的类似介绍。
所不同的是。深度未在数据库中存储节点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. boostrap-非常好用但是容易让人忽略的地方------clearfix

    代码 显示结果 代码 结果

  2. 写作Openwrt固件

    启动tftp软体.并设置文件夹的固件文件(Current Dircctory)和serverIP(Service interface).server指PC机.图.:                   ...

  3. Forbidden You don't have permission to access / on this server.

    原文:Forbidden You don't have permission to access / on this server. Forbidden You don't have permissi ...

  4. Java下获取可用CPU数

    1.获取cpu核心数:Runtime.getRuntime().availableProcessors();创建线程池:Executors.newFixedThreadPool(nThreads);/ ...

  5. 开展project 正常的生活之路

    相对刚走出学校的学生在其他行业工作,竞争力的薪酬,同时.并不断地不仅学习更新专业知识让你感到生活的充实,更满足了你那不让外人知的虚荣心.在刚出校门的几年中,你常常回头看看被你落在后面的同学们,在内心怜 ...

  6. Linux:闪光的宝石,智慧(下一个)

    2005年4月7日.Linus Torvalds公布了一款新型通用工具软件包,叫做"Git"(the Git source code management system).&quo ...

  7. Redux基础

    Redux 是一个状态容器 Redux 就像是作者自己的介绍,它不会为你提供任何的东西,它不会告诉你如何做路由,它只专注于应用程序状态,是一个 JavasSript 的状态容器,所有的状态的变化都是当 ...

  8. crmplugin项目加入key文件

    通常,办crm的plugin发展,然后dll文件导入系统,都需要加入项目key文件,那么怎么办? 在右上角单击指定项目--属性: 点击属性后,弹出属性编辑框: watermark/2/text/aHR ...

  9. Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用

    Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用 Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.cs ...

  10. Oracle内存管理(五)

    [深度分析--eygle]学习笔记 1.4. 2其他内存组件 Large Pool-大池是SGA的一个可选组件,通经常使用于共享server模式(MTS). 并行计算或 RMAN的备份恢复等操作. J ...