项目开发-树形层级结构中的数量统计

项目开发中。有一 菜单的树形结构展示时,须要统计各个菜单下记录的总数。通常假设树形结构的深度为2(仅仅有两级菜单的话),使用for循环统计没有问题。可是假设树形菜单的深度没有限制,就不能通过两次for循环来实现统计了,仅仅能借助递归来统计了,使用一个全局map记录每次统计的值。简单实现例如以下:

具有层级结构的元素Source类,省略getter/setter:

public class Source {
	private Source parent;
	private String id;
	private String name;
	private List<Source> children;
}

统计方法。仅仅须要层级结构的根元素,就可以完毕各个菜单子元素的统计:

import java.util.List;
import java.util.Map;

public class SourceCountUtil {
	/**
	 * 树形结构展示的某个节点的统计数值=孩子总数+孩子的孩子总数
	 * @param root
	 * @param result
	 * @return
	 */
	public static int doCount(Source root,Map<String,Object> result){
		int count = 0;
		List<Source> list = root.getChildren();
		if(list==null ||list.size()==0){
			return count;
		}

		for (Source child : list) {
			//统计当前元素的子节点个数
			count++;

			//统计子节点的孩子总数
			int cur_cnt=doCount( child,result);
			result.put(String.valueOf(child.getId()), cur_cnt);

			count += cur_cnt;
		}

		//返回前记录当前节点的统计个数
		result.put(String.valueOf(root.getId()), count);
		return count;
	}

}

每次利用递归统计完一个菜单的子节点个数后,存入map中。最后输出的result存储了全部菜单的子元素的个数。

dtree.js实现页面菜单展示也是通过递归完毕的。结合上述统计,能够得到例如以下的菜单统计效果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd29qaXVzaGl3bzk0NXlvdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

时间: 2024-10-14 20:45:52

项目开发-树形层级结构中的数量统计的相关文章

5、VS2010+ASP.NET MVC4+EF4+JqueryEasyUI+Oracle项目开发之——使用datagrid做报表统计

需要说明一点:数据库访问我使用的是EF框架,但是在报表统计着一块由于使用到了动态表,即根据每一天单独生成了一张数据表,所以不好使用EF进行预先添加,于是我在数据库访问层里面封装了两套数据库访问框架,一个就是EF,一个就是传统的ADO.NET.当设计到使用动态表时,我就调用用ADO.NET进行数据库访问操作了. 先看下View,这里我使用的是jquery easyUI里面的datagrid来做的报表.如下: 单击选中日报: 年报如下: @model YKT.Model.SubCompanyRepo

用互联网思维来开发客户端软件——项目开发小结

随着智能手机.平板电脑的快速发展,台式电脑在个人用户那里已经没落了,但是台式电脑仍然是企业用户工作中的主要工具,且具有不可替代的作用.客户端软件在企业级用户那里有着不可替代的作用,结合时代发展,我们应以互联网思维来做好企业级应用客户端软件?研发快速迭代.快速试错,把大功能拆分成小功能,分阶段实现,追求微创新. 通常企业级应用的客户端,就是企业管理应用系统,一般分为BS与CS两种架构,CS架构要求在用户的电脑上装上客户端与数据库,或者数据库安装在数据库服务器上.这种方式我们经常会碰到一些问题,比如

基于J2EE平台下SSH2+JBPM4.4+ExtJs4.1 框架整合&amp;项目实战(HR项目开发、SSH2作为框架)

对这个课程有兴趣的朋友可以加我的QQ2059055336和我联系 课程讲师:ANDY 课程分类:Java 适合人群:中级 课时数量:46课时 用到技术:Extjs.SSH2.Mvc 涉及项目:HR项目用户管理.Extjs树形结构.流程接口 更新程度:完成 课程包含了以下主要的技术面:前端采用Extjs4.x:后台使用目前中小型开发较为常用的SSH2作为框架,囊括了JBPM4.4工作流引擎.课程经由基础学习向高阶跨进,一步一步介绍了前后台的关系,以及前后台的整合.JBPM的整合等等,都是属于目前较

嵌入式linux 项目开发(一)——SQLite数据库

嵌入式linux 项目开发(一)--SQLite数据库 一.SQLite数据库简介 SQLite是一个开源的嵌入式关系数据库,是一种轻量级的.自给自足的.无服务器的.无需配置的.事务性的SQL数据库引擎,其特点是高度便携.使用方便.结构紧凑.高效.可靠,体积小,支持 ACID(原子性.一致性.独立性及持久性Atomicity.Consistency.Isolation.Durability)事物. SQLite官网:http://www.sqlite.org/ SQLite数据库采用模块化设计,

前端开发树形插件带来的烦恼(一)

前端开发树形插件带来的烦恼(一) 前端开发中,有些项目中会用到树形插件,其数据结构也比较简单,大体如下: 1 TreeRoot 2 3 |-- tree01 id = 01 pid = 0 4 |-- leaf01 id = 04 pid = 01 5 |-- leaf02 id = 05 pid = 01 6 |-- leaf03 id = 06 pid = 01 7 ...... 8 |-- tree02 id = 02 pid = 0 9 |-- leaf04 id = 07 pid =

大数据技术之_18_大数据离线平台_01_项目开发流程+大数据常用应用/分析平台/业务处理方式+数据分析平台的数据来源+数据处理的流程+项目集群的规模+需求分析+技术架构/选型

一.项目开发流程1.1.项目调研1.2.项目需求分析1.3.方案设计1.3.1.概要设计1.3.2.详细设计1.4.编码实现1.4.1.单元测试1.4.2.集成测试1.4.3.压力测试1.4.4.用户测试二.大数据常用应用2.1.数据出售2.2.数据分析2.2.1.百度统计2.2.2.友盟2.2.3.其他统计分析组织2.3.搜索引擎2.3.1.solr2.3.2.luence2.3.3.luence & solr 对比2.4.推荐系统(高数)2.4.1.技术2.4.2.算法2.5.精准营销2.5

第八章 企业项目开发--分布式缓存memcached

注意:本节代码基于<第七章 企业项目开发--本地缓存guava cache> 1.本地缓存的问题 本地缓存速度一开始高于分布式缓存,但是随着其缓存数量的增加,所占内存越来越大,系统运行内存越来越小,最后系统会被拖慢(这一点与第二点联系起来) 本地缓存存于本机,其缓存数量与大小受本机内存大小限制 本地缓存存于本机,其他机器的访问不到这样的缓存 解决方案:分布式缓存 Jboss cache:缓存还存于本机,但是会同步更新到其他机器(解决了第三个问题,解决不了第一和第二个问题),如果缓存机器数量很多

讲讲项目开发生命周期

项目开发生命周期: 一:软件项目开发模式 螺旋开发模式: 螺旋开发模式 适合,项目前期 需求不确定的情况下: 对于每一个模块,一个个开发,进行分析,设计,编码,测试,上线. 好处; keyi可以 有效的 降低 软件风险,我尽量 做出来的产品尽量满足客户需求: 瀑布模式: 瀑布 模式:就是先进行 所有模块的 项目需求分析,当分析结束后,才进入项目的下一个阶段,即 设计,编码,测试,上线. 好处:更容易 进行 项目把控,和项目质量控制! 对项目质量非常高的 设计到军方的 都是瀑布 都是 这样的开发

第十一章 企业项目开发--消息队列activemq

注意:本章代码基于 第十章 企业项目开发--分布式缓存Redis(2) 代码的github地址:https://github.com/zhaojigang/ssmm0 消息队列是分布式系统中实现RPC的一种手段. 1.消息队列的基本使用流程 假设: 我们有这样一个需求,当每注册一个admin的之后,就写一条日志log数据到数据库. 分析: 在实际中,我们是不会把日志直接写入数据库的,因为日志数据通常是庞大的,而且日志的产生是频繁的,如果我们使用数据库存储日志,哪怕是使用异步存储,也是极耗性能的.