/**
* @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
java根据list遍历树关系
最新推荐文章于 2024-07-02 19:19:45 发布