我有不同类别的顶点FramedGraph对象,例如人物和地点。 我想找回“人”类的所有顶点。 这是我目前的方法。
public List<Person> listPeople() {
List<Person> people = new ArrayList<Person>();
Iterator iterator = g.getVertices().iterator();
while (iterator.hasNext()) {
Vertex v = (Vertex) iterator.next();
Person p = (Person) g.getVertex(v.getId(), Person.class);
people.add(p);
}
return people;
}
因为我遍历所有顶点,然后在同一时间浸渍早在一这种感觉得不得了的低效。 我看着使用小鬼语法,但我不明白如何通过一个框架类来限制。 是否有更有效的检索方法? 谢谢..
据我了解,在TinkerPop有关框架架构作为围绕顶点的包装类。 顶点是不实际存储为接口类。 因此,我们需要一种方法来确定顶点作为一个特定的type
。
我的解决办法,我加@TypeField
和@TypeValue
注解,我帧类。 然后我使用这些值来查询我的FramedGraph
。
这些注释的文档可以在这里找到: https://github.com/tinkerpop/frames/wiki/Typed-Graph
示例代码
@TypeField("type")
@TypeValue("person")
interface Person extends VertexFrame { /* ... */ }
然后定义FramedGraphFactory
加入TypedGraphModuleBuilder
这样。
static final FramedGraphFactory FACTORY = new FramedGraphFactory(
new TypedGraphModuleBuilder()
.withClass(Person.class)
//add any more classes that use the above annotations.
.build()
);
然后检索类型的顶点Person
Iterable<Person> people = framedGraph.getVertices('type', 'person', Person.class);
我不知道这是最有效的/简洁的解决方案(我想看看有什么@stephen mallette建议)。 这是当前不可用,但它会是合乎逻辑的,能够做一些事情,如:
// framedGraph.getVertices(Person.class)
这个问题看起来喜欢它同这个问题(貌似你是第一个) - TinkerPop有关框架:根据接口类型查询顶点 。