您可以使用and 或filter(取决于您正在遍历的具体Traversal)
TinkerGraph g = TinkerGraph.open();
/*
u:A
<1:A> ---------- <2:B>
| |
| x:B | v:B
| |
<4:B> ---------- <3:A>
w:A
*/
Vertex v1 = g.addVertex(T.label, "A", T.id, 1);
Vertex v2 = g.addVertex(T.label, "B", T.id, 2);
Vertex v3 = g.addVertex(T.label, "A", T.id, 3);
Vertex v4 = g.addVertex(T.label, "B", T.id, 4);
v1.addEdge("A", v2, T.id, "u");
v2.addEdge("B", v3, T.id, "v");
v3.addEdge("A", v4, T.id, "w");
v4.addEdge("B", v1, T.id, "x");
// predefined traversal from somewhere
Traversal<Vertex, Vertex> vertexFilter = __.hasLabel("A");
Traversal<Vertex, Vertex> edgeFilter = __.hasLabel("B");
Traversal<Vertex, Edge> vertex2edges = __.bothE().filter(edgeFilter);
Traversal<Edge, Vertex> edge2vertex = __.bothV().filter(vertexFilter);
System.out.println("Get edges matching filter with any vertex matching filter:");
g.traversal().E().filter(edgeFilter).and(edge2vertex).toList()
.forEach(e -> System.out.printf(" - %s%n", e.id()));
System.out.println("Get vertex matching filter with any edge matching filter:");
g.traversal().V().filter(vertexFilter).and(vertex2edges).toList()
.forEach(v -> System.out.printf(" - %s%n", v.id()));
有输出
Get edges matching filter with any vertex matching filter:
- v
- x
Get vertex matching filter with any edge matching filter:
- 1
- 3