浏览代码

树形统计实例

gaodm 5 年之前
父节点
当前提交
5acdf91dbd

+ 41 - 0
cdtk-service/src/main/java/com/diagbot/util/Xmzb.java

@@ -0,0 +1,41 @@
+package com.diagbot.util;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/1/8 15:53
+ */
+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;
+    }
+
+
+}

+ 91 - 0
cdtk-service/src/main/java/com/diagbot/util/XxfUtil.java

@@ -0,0 +1,91 @@
+package com.diagbot.util;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/1/8 15:54
+ */
+public class XxfUtil {
+
+    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", null);
+        Xmzb root1_1_2 = new Xmzb("1-1-2", "1-1", 33);
+        Xmzb root1_2_1 = new Xmzb("1-2-1", "1-2", null);
+        Xmzb root1_2_2 = new Xmzb("1-2-2", "1-2", 40);
+        Xmzb root1_1_1_1 = new Xmzb("1-1-1-1", "1-1-1", 50);
+        Xmzb root1_1_1_2 = new Xmzb("1-1-1-2", "1-1-1", 49);
+        Xmzb root1_2_1_1 = new Xmzb("1-2-1-1", "1-2-1", 2);
+        Xmzb root1_2_1_2 = new Xmzb("1-2-1-1", "1-2-1", 3);
+        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);
+        allList.add(root1_1_1_1);
+        allList.add(root1_1_1_2);
+        allList.add(root1_2_1_1);
+        allList.add(root1_2_1_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;
+
+    }
+
+}