java根据list遍历树关系

/**  
 * @Title: EdgeTool.java 
 * @Package com.longshine.model.service.run 
 * @Description: TODO(用一句话描述该文件做什么) 
 * @author jiangkai  
 * @date 2018年4月8日 下午5:59:21 
 * @version V1.0  
 */
package com.longshine.model.service.run;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.longshine.model.entity.Edge;

/**
 * @ClassName: EdgeTool
 * @Description: TODO(这里用一句话描述这个类的作用)
 * @author jiangkai
 * @date 2018年4月8日 下午5:59:21
 */

public class EdgeTool {
	public static Map<String, Object> getEdges(List<Edge> list) {
		String[][] edges = new String[list.size()][2];
		Set<String> vexs = new HashSet<String>();
		for (int i = 0; i < list.size(); i++) {
			edges[i][0] = list.get(i).getInDegree();
			edges[i][1] = list.get(i).getOutDegree();
			vexs.add(list.get(i).getInDegree());
			vexs.add(list.get(i).getOutDegree());
		}
		Map<String, Object> result = new HashMap<>();
		result.put("vexs", vexs);
		result.put("edges", edges);
		return result;
	}

	public static List<Edge> getEdgesBynodeId(List<Edge> list, String nodeId, String sign) {
		List<Edge> listnew = new ArrayList<Edge>();
		if ("up".equals(sign)) {
			String res = EdgeTool.getcutlistfu(nodeId, list, sign);
			String temp="";
			for (int i = 0; i < list.size(); i++) {
					if(nodeId.equals(list.get(i).getOutDegree())){
						temp=list.get(i).getInDegree();
					}
			}
			for (int i = 0; i < list.size(); i++) {
				if(res.contains(list.get(i).getInDegree())){
					if(temp.equals(list.get(i).getInDegree())){
						if(nodeId.equals(list.get(i).getOutDegree())){
							listnew.add(list.get(i));
						}
					}else{
					listnew.add(list.get(i));
					} 
				}
			}
		} else if ("down".equals(sign)) {

			String res = EdgeTool.getcutlistzi(nodeId, list, sign);
			String temp="";
			for (int i = 0; i < list.size(); i++) {
					if(nodeId.equals(list.get(i).getInDegree())){
						temp=list.get(i).getOutDegree();
					}
			}
			for (int i = 0; i < list.size(); i++) {
				if(res.contains(list.get(i).getOutDegree())){
					if(temp.equals(list.get(i).getOutDegree())){
						if(nodeId.equals(list.get(i).getInDegree())){
							listnew.add(list.get(i));
						}
					}else{
					listnew.add(list.get(i));
					} 
				}
			}
		
		}

		return listnew;
	}

	// fu
	public static String getcutlistfu(String nodeId, List<Edge> edgelist, String res) {
		// List<String> list = new ArrayList<String>();
		String nodes = "";
		if (nodeId.indexOf(",") > -1) {
			String[] nodeids = nodeId.split(",");
			for (int i = 0; i < nodeids.length; i++) {
				for (int j = 0; j < edgelist.size(); j++) {
					if (nodeids[i].equals(edgelist.get(j).getOutDegree())) {
						nodes += edgelist.get(j).getInDegree() + ",";
					}
				}
			}
		} else {
			for (int i = 0; i < edgelist.size(); i++) {
				if (nodeId.equals(edgelist.get(i).getOutDegree())) {
					// list.add(edgelist.get(i).getEdgeId());
					nodes += edgelist.get(i).getInDegree() + ",";
				}
			}
		}
		res += nodes;
		if ("".equals(nodes)) {
			return res;
		} else {
			return getcutlistfu(nodes, edgelist, res);
		}
	}
	// zi
	public static String getcutlistzi(String nodeId, List<Edge> edgelist, String res) {
		// List<String> list = new ArrayList<String>();
		String nodes = "";
		if (nodeId.indexOf(",") > -1) {
			String[] nodeids = nodeId.split(",");
			for (int i = 0; i < nodeids.length; i++) {
				for (int j = 0; j < edgelist.size(); j++) {
					if (nodeids[i].equals(edgelist.get(j).getInDegree())) {
						nodes += edgelist.get(j).getOutDegree() + ",";
					}
				}
			}
		} else {
			for (int i = 0; i < edgelist.size(); i++) {
				if (nodeId.equals(edgelist.get(i).getInDegree())) {
					nodes += edgelist.get(i).getOutDegree() + ",";
				}
			}
		}
		res += nodes;
		if ("".equals(nodes)) {
			return res;
		} else {
			return getcutlistzi(nodes, edgelist, res);
		}
	}

	public static String[][] getOrderEdges(String experimentId, String sessionId, List<Edge> list) {
		Map<String, Object> result = getEdges(list);

		String[][] edges = (String[][]) result.get("edges");
		Set<String> vexs = (Set<String>) result.get("vexs");
		String[] vexss = vexs.toArray(new String[vexs.size()]);

		DAGTop pg = new DAGTop(vexss, edges);
		String[] orderednodes = pg.topologicalSort();
		String[][] orderededges = new String[orderednodes.length][3];
		for (int i = 0; i < orderednodes.length; i++) {
			orderededges[i][0] = experimentId;
			orderededges[i][1] = orderednodes[i];
			orderededges[i][2] = sessionId;
		}
		return orderededges;
	}

}
list有父子关系,根据节点id去节点之前和之后的list
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值