树形结构统计-递归统计(父亲节点=孩子节点之和)

来源:互联网 发布:顶级域名多少钱 编辑:程序博客网 时间: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
原创粉丝点击