使用 GremlinPipeline 响应:
public Graph createGraph()
{
Graph g = TinkerGraphFactory.createTinkerGraph();
String [] ids ={"A","B","C","D","E","F","G","H","I","J","L","M","N","O"};
int i= 0;
for (String s:ids)
{
Vertex v = g.addVertex(s);
i++;
v.setProperty("route",i);
}
g.getVertex("L").setProperty("route",2); // If you want "F" as the next vertex from E then mark the route of "F" as 2.
g.addEdge(1,g.getVertex("A"),g.getVertex("B"),"x") ;
g.addEdge(2,g.getVertex("B"),g.getVertex("C"),"x") ;
g.addEdge(3,g.getVertex("C"),g.getVertex("D"),"x") ;
g.addEdge(4,g.getVertex("D"),g.getVertex("E"),"x") ;
g.addEdge(5,g.getVertex("E"),g.getVertex("F"),"x") ;
g.addEdge(6,g.getVertex("F"),g.getVertex("G"),"x") ;
g.addEdge(17,g.getVertex("G"),g.getVertex("I"),"x") ;
g.addEdge(18,g.getVertex("I"),g.getVertex("J"),"x") ;
g.addEdge(19,g.getVertex("E"),g.getVertex("L"),"x") ;
g.addEdge(20,g.getVertex("L"),g.getVertex("M"),"x") ;
g.addEdge(21,g.getVertex("M"),g.getVertex("N"),"x") ;
g.addEdge(22,g.getVertex("N"),g.getVertex("O"),"x") ;
return g;
}
public void traverse(Graph graph)
{
final Map<String,Object> cache = new HashMap<String, Object>();
final String attribute="route";
GremlinPipeline pipes = new GremlinPipeline(graph.getVertex("A")).out().sideEffect(new PipeFunction<Vertex,Vertex>() {
public Vertex compute(Vertex vertex)
{
cache.put(attribute,vertex.<Object>getProperty(attribute));
return vertex;
}
}).out().out().out().out().filter(new PipeFunction<Vertex,Boolean>() {
public Boolean compute(Vertex vertex)
{
if (vertex.getProperty(attribute) == cache.get(attribute))
{
return true;
}
else
{
return false;
}
}
}).out().out().out().path();
while(pipes.hasNext())
{
ArrayList<Vertex> vertices = (ArrayList<Vertex>)pipes.next();
for (Vertex v : vertices)
{
System.out.print("->"+v.getId());
}
System.out.println();
}
}