递归树,从叶子节点找到父节点的的各种参数包括路径

摘要: 这几天有个新需求,无聊的报表,通过各种维度组合成一个树,点击数的节点,组合各种条件去查询数据,由于在树的不同层级,需要向上查找父节点,直到根节点的各种组合条件。所以一个基本的想法是从叶子节点向上递归得到各种条件.

这几天有个新需求,无聊的报表,通过各种维度组合成一个树,点击数的节点,组合各种条件去查询数据,由于在树的不同层级,需要向上查找父节点,直到根节点的各种组合条件。所以一个基本的想法是从叶子节点向上递归得到各种条件.
给Team的人写了个简单的测试,包括一个树的VO, 条件的类.还有一个主类,测试用的

1. 定义 TreeVO

public class TreeVO {
	
	private int pid;
	private int id;
	private String name;
	private String type;
	private String code;
	private List child = new ArrayList();
        //...省去各种get,set.
}



2. 得到各种查询条件的类Condiction类,包含了各种维度
public class Condiction {
	
	private String project;
	private String region;
	private String subcon;
//...省去set,get
}


3. 主要测试类:
public class MainClass {
	
	public static void main(String[] args) {
		Map treeMap = new HashMap();
		
		TreeVO tree = new TreeVO();
		tree.setId(1);
		tree.setPid(-1);
		tree.setCode("123code");
		tree.setType("project");
		tree.setName("rootNmae");
		treeMap.put("1", tree);
		int count = 2;
		
		for(int i=0; i<5; i++) {
			TreeVO treeRegion = new TreeVO();
			treeRegion.setId(count++);
			treeRegion.setPid(1);
			treeRegion.setCode("region" + i);
			treeRegion.setType("region");
			treeRegion.setName("region" + i);
			tree.getChild().add(treeRegion);
			treeMap.put(treeRegion.getId() + "", treeRegion);
			for(int j=0; j<5; j++) {
				TreeVO treeSubcon = new TreeVO();
				treeSubcon.setId(count++);
				treeSubcon.setPid(treeRegion.getId());
				treeSubcon.setCode("subcon" +i+j);
				treeSubcon.setType("subcon");
				treeSubcon.setName("subcon" +i+j);
				treeMap.put(treeSubcon.getId() + "", treeSubcon);
				treeRegion.getChild().add(treeSubcon);
			}
			
		}
		
		// 得到叶子节点
		
		List leafList = new ArrayList();
		for(Entry entry:treeMap.entrySet()) {
			if (entry.getValue().getChild().size()==0) {
				leafList.add(entry.getValue());
			}
		}
		
		for(TreeVO treevo : leafList) {
			Condiction c = new Condiction();
			c = recNodes(c,treevo, treeMap);
			System.out.println(c.getProject());
			System.out.println(c.getRegion());
			System.out.println(c.getSubcon());
			System.out.println("======================");
		}
		
		System.out.println(tree);
		
	}
	
	public static Condiction recNodes(Condiction c,TreeVO currentTreeVO, Map treeMap) {
		
		
		if (currentTreeVO.getType().equals("subcon")) {
			c.setSubcon(currentTreeVO.getCode() + "-" + currentTreeVO.getType());
		}
		if (currentTreeVO.getType().equals("region")) {
			c.setRegion(currentTreeVO.getCode() + "-" + currentTreeVO.getType());
		}
		if (currentTreeVO.getType().equals("project")) {
			c.setProject(currentTreeVO.getCode() + "-" + currentTreeVO.getType());
		}
		if (currentTreeVO.getPid() == -1) {			
			return c;
		}
		
		TreeVO pTreevo = treeMap.get(currentTreeVO.getPid() + "");
		return recNodes(c, pTreevo, treeMap);
		
		
	}


构造了一个树,并遍历,得到各种维度的条件。
仅仅测试给team 人员参考而已。

上一篇: 开通了百度打赏, 新工作也慢慢步入正轨
下一篇: 在javascript中放弃indexOf, 用$.inArray吧
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号