zoukankan      html  css  js  c++  java
  • 项目开发-树形层级结构中的数量统计

            项目开发中。有一 菜单的树形结构展示时,须要统计各个菜单下记录的总数。通常假设树形结构的深度为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实现页面菜单展示也是通过递归完毕的。结合上述统计,能够得到例如以下的菜单统计效果:




  • 相关阅读:
    [oracle] linux Oracle 安装配置
    [dns] linux dns 安装配置
    [apache] linux Apache 编译安装
    [yum] linux yum 配置本地和ftp源
    [ftp] linux ftp 安装配置
    [ssh 无密码访问]linux ssh公匙密匙无密码访问
    [php ] linux php 搭建
    [mysql ] linux mysal 修改字符集
    [ mysql ] linux mysql 忘记root密码重置
    国安是冠军
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5205225.html
Copyright © 2011-2022 走看看