Solo para notas: estadísticas del árbol de Java: cada nodo agrega el número de departamentos directos

Código modificado de: https://blog.csdn.net/xuxingfan000/article/details/52159851
gracias @ xuxingfan000

Recientemente, el proyecto ha encontrado estadísticas de estructura de árbol. La profundidad del árbol es incierta. El nodo principal = la suma de
los nodos secundarios. Este código modificado necesita agregar el número del nodo principal en sí mismo para realizar el recuento del nodo principal Para el
código del bean de entidad, consulte la
demostración de estadísticas del enlace anterior. El código se modifica de la siguiente manera:

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;

	}

}

Los resultados son los siguientes
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_35977139/article/details/97375252
Recomendado
Clasificación