Hallo Community,
Ich hänge an einen sehr ärgerlichen in Sachen Logik und Algorithmen, dass mir eigentlich sonst immer lag.
Ich habe folgenden Workflow:
Der Einfachheit halber habe ich genau ein Klasse welche alle Nodes darstellt:
Ergebnis:
Ziel ist es, durch alle Nodes genau einmal zu iterieren ohne das welche doppelt aufgerufen werden. Auch die Reihenfolge sollte beachtet werden:
Besser wäre jedoch, wenn jeder Node nach einem Zweig wie Ebenen aufgerufen wird. Ungefähr so:
Nach Gate Split folgt der nächste Aufruf node1, node2, node3 (Ebene beendet) danach erst send und gateJoin (Ebene beended)
Somit wäre das optimale und von mir auch gesuchte Ergebnis dieses:
Ich hänge an einen sehr ärgerlichen in Sachen Logik und Algorithmen, dass mir eigentlich sonst immer lag.
Ich habe folgenden Workflow:

Der Einfachheit halber habe ich genau ein Klasse welche alle Nodes darstellt:
Java:
package de.test.workflow;
import java.util.ArrayList;
import java.util.List;
public class Node {
private String name;
private List<Node> outcomingNodes;
public Node(String name) {
this.name = name;
outcomingNodes = new ArrayList<Node>();
}
public String getName() {
return name;
}
public void addOutcomingNode(Node node) {
outcomingNodes.add(node);
}
public List<Node> getOutcomingNodes() {
return outcomingNodes;
}
private static void iterate(Node node, List<Node> nodes) {
System.out.println(node.getName());
for(Node next : node.getOutcomingNodes()) {
if(!nodes.contains(next)) {
nodes.add(next);
iterate(next, nodes);
}
}
}
public static void main(String[] args) {
Node start = new Node("Start");
Node gateSplit = new Node("Gate split");
Node node1 = new Node("node1");
Node node2 = new Node("node2");
Node node3 = new Node("node3");
Node send = new Node("send");
Node gateJoin = new Node("Gate join");
Node end = new Node("End");
start.addOutcomingNode(gateSplit);
gateSplit.addOutcomingNode(node1);
gateSplit.addOutcomingNode(node2);
gateSplit.addOutcomingNode(node3);
node1.addOutcomingNode(send);
node2.addOutcomingNode(gateJoin);
node3.addOutcomingNode(gateJoin);
gateJoin.addOutcomingNode(end);
List<Node> nodes = new ArrayList<Node>();
nodes.add(start);
iterate(start, nodes);
}
}
Ergebnis:
Java:
Start
Gate split
node1
send
node2
Gate join
End
node3
Ziel ist es, durch alle Nodes genau einmal zu iterieren ohne das welche doppelt aufgerufen werden. Auch die Reihenfolge sollte beachtet werden:
Java:
Start
Gate split
node1
send
node2
node3
Gate join
End
Besser wäre jedoch, wenn jeder Node nach einem Zweig wie Ebenen aufgerufen wird. Ungefähr so:
Nach Gate Split folgt der nächste Aufruf node1, node2, node3 (Ebene beendet) danach erst send und gateJoin (Ebene beended)
Somit wäre das optimale und von mir auch gesuchte Ergebnis dieses:
Code:
Start
Gate split
node1
node2
node3
send
Gate join
End
Zuletzt bearbeitet: