0%

Java树形统计: 各节点追加直属部门人数

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

最近做项目遇到树形结构的统计,树的的深度不定,父亲节点=孩子节点之和
本修改代码要实现父亲节点的计数要追加父亲节点本身的数量.
实体bean代码略 参考上述链接
统计demo代码修改如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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;

}

}

运行结果如下

运行结果

隐藏
推进创文常态化 共建文明襄阳城 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 创建全国文明城市 加快建设汉江流域中心城市 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 讲文明 树新风 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 用微笑融化陌生 用文明美化襄阳 · 🄽🄾5️⃣9️⃣7️⃣2️⃣ · 争当文明使者 播撒文明新风