仅作笔记用: Java树形统计: 各节点追加直属部门人数

代码修改自: https://blog.csdn.net/xuxingfan000/article/details/52159851
感谢@xuxingfan000

最近做项目遇到树形结构的统计,树的的深度不定,父亲节点=孩子节点之和
本修改代码要实现父亲节点的计数要追加父亲节点本身的数量.
实体bean代码略 参考上述链接
统计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", 0);
		Xmzb root1_1 = new Xmzb("1-1", "1", 3999);
		Xmzb root1_2 = new Xmzb("1-2", "1", 1);
		Xmzb root1_1_1 = new Xmzb("1-1-1", "1-1", 1);
		Xmzb root1_1_2 = new Xmzb("1-1-2", "1-1", 0);
		Xmzb root1_2_1 = new Xmzb("1-2-1", "1-2", 1);
		Xmzb root1_2_2 = new Xmzb("1-2-2", "1-2", 0);
		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) {
		// System.out.println(root.getXmgs());
		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(root.getXmgs() + xmgs.intValue()); 
		map.put("xmgs", root.getXmgs());
	    /
		//注意这两行修改//
		/
		
		
		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;

	}

}

运行结果如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值