树形结构统计-递归统计(父亲节点=孩子节点之和)
来源:互联网 发布:顶级域名多少钱 编辑:程序博客网 时间:2024/06/05 16:25
最近做项目遇到树形结构的统计,树的的深度不定,父亲节点=孩子节点之和
使用java实现如下:
实体bean代码如下:
package tt;public class Xmzb {private String id;private String pid;/** * 项目个数 */private Integer xmgs;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getPid() {return pid;}public void setPid(String pid) {this.pid = pid;}public Integer getXmgs() {return xmgs;}public void setXmgs(Integer xmgs) {this.xmgs = xmgs;}public Xmzb(String id, String pid, Integer xmgs) {super();this.id = id;this.pid = pid;this.xmgs = xmgs;} }统计demo代码如下:
package tt;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class XxfMain {public static List<Xmzb>allList=new ArrayList<Xmzb>();public static void main(String[] args) {Xmzb root=new Xmzb("1","0",null);Xmzb root1_1=new Xmzb("1-1","1",null);Xmzb root1_2=new Xmzb("1-2","1",null);Xmzb root1_1_1=new Xmzb("1-1-1","1-1",1);Xmzb root1_1_2=new Xmzb("1-1-2","1-1",null);Xmzb root1_2_1=new Xmzb("1-2-1","1-2",1);Xmzb root1_2_2=new Xmzb("1-2-2","1-2",1);allList.add(root);allList.add(root1_1);allList.add(root1_2);allList.add(root1_1_1);allList.add(root1_1_2);allList.add(root1_2_1);allList.add(root1_2_2);List<Xmzb>list=new ArrayList<Xmzb>();list.add(root);doCount(root,list);for (Xmzb xmzb : allList) { System.out.println(xmzb.getId()+":"+xmzb.getXmgs());}}public static Map<String,Object> doCount(Xmzb root ,List<Xmzb> list){Map<String,Object>map=new HashMap<String,Object>();Double xmgs = 0.0;List<Xmzb> clist=findByQueryString(root.getId());//此处可以使用sql通过父节点查询孩子节点sql:from Xmzb where year='2016' and pid='"+root.getId()+"'if(clist==null ||clist.size()==0){if(null!=root.getXmgs()){ map.put("xmgs", root.getXmgs());}else{map.put("xmgs", xmgs);}return map;}if(clist!=null &&clist.size()>0){list.addAll(clist);for (Xmzb child : clist) {//递归Map<String,Object>map_c=doCount(child,list);Double res=Double.parseDouble(map_c.get("xmgs").toString());child.setXmgs(res.intValue()); //统计当前元素的子节点个数xmgs+=res;}}root.setXmgs(xmgs.intValue());map.put("xmgs", xmgs);map.put("list", list);return map;}public static List<Xmzb>findByQueryString(String pid){List<Xmzb>list=new ArrayList<Xmzb>();for (Xmzb xmzb : allList) {if(xmzb.getPid().equals(pid)){list.add(xmzb);}}return list;}}
运行结果如下
1 0
- 树形结构统计-递归统计(父亲节点=孩子节点之和)
- Oracle树形统计--子节点汇总到父节点
- 触发器递归更新 树形结构子节点
- Java递归删除树形结构父节点
- oracle树形结构由子节点递归得到父节点
- oracle树形结构由子节点递归得到父节点
- oracle树形结构由子节点递归得到父节点
- oracle树形结构由子节点递归得到父节点
- Oracle 递归统计所有节点下的子节点个数
- 递归输出树形节点
- openstack节点资源统计
- 二叉树统计节点
- 92. 统计节点个数
- python统计xml节点
- 统计叶节点
- inode节点简单统计
- Java递归实现删除树形结构的任一节点
- 递归删除树形结构的所有子节点(java和mysql实现)
- 动态规划-采药问题 [原题+题解]
- 数据结构实验之栈八:栈的基本操作
- 百度地图集成(一)
- VO,PO,POJO的定义和区别
- 实现修改iOS应用程序名
- 树形结构统计-递归统计(父亲节点=孩子节点之和)
- 传送门:安卓异步加载数据--总结篇
- HashMap排序
- 串结构练习——字符串连接
- POJO和javabean的异同
- iOS --代码实现拉伸图片
- Android Handler机制
- 什么是POJO?
- View的学习笔记-View的事件分发机制