Neo4j - 遍历新 API 中的节点,从给定标签开始
Neo4j - traverse nodes in new API, starting from given label
在 Neo4j 2.1 中,我使用了这样的代码:
ResourceIterable<Node> it = GlobalGraphOperations.at(db).getAllNodesWithLabel(FOO);
TraversalDescription td = db.traversalDescription().breadthFirst().
relationships(BAR_REL).uniqueness(Uniqueness.NODE_GLOBAL);
for (Path p : td.traverse(it)) {
...
}
在 Neo4j 2.2 中,getAllNodesWithLabel()
方法已弃用,但我不确定如何消除它。替换方法 db.findNodes(Label)
很接近,但是它 returns 是 Iterator
而不是 Iterable
,而且我无法看到用 [=14= 开始遍历] 除非我把它包在一个虚拟的 Iterable
之类的东西里。有人有指点吗?
有(至少)两种方便的方法可以解决这个问题:
1) 正如您提到的将 Iterator
包装成 Iterable
。 Neo4j 开箱即用:
import org.neo4j.helpers.collection.IteratorUtil;
...
for (Path p : td.traverse(IteratorUtil.asIterable(it))) {
...
}
2) traverse
方法也接受一个 Node[]
数组(作为 vararg),所以你可以,例如使用 Guava 的 Iterables.toArray()
我更喜欢 1),因为内存开销较小,而且它不包含其他依赖项。
在 Neo4j 2.1 中,我使用了这样的代码:
ResourceIterable<Node> it = GlobalGraphOperations.at(db).getAllNodesWithLabel(FOO);
TraversalDescription td = db.traversalDescription().breadthFirst().
relationships(BAR_REL).uniqueness(Uniqueness.NODE_GLOBAL);
for (Path p : td.traverse(it)) {
...
}
在 Neo4j 2.2 中,getAllNodesWithLabel()
方法已弃用,但我不确定如何消除它。替换方法 db.findNodes(Label)
很接近,但是它 returns 是 Iterator
而不是 Iterable
,而且我无法看到用 [=14= 开始遍历] 除非我把它包在一个虚拟的 Iterable
之类的东西里。有人有指点吗?
有(至少)两种方便的方法可以解决这个问题:
1) 正如您提到的将 Iterator
包装成 Iterable
。 Neo4j 开箱即用:
import org.neo4j.helpers.collection.IteratorUtil;
...
for (Path p : td.traverse(IteratorUtil.asIterable(it))) {
...
}
2) traverse
方法也接受一个 Node[]
数组(作为 vararg),所以你可以,例如使用 Guava 的 Iterables.toArray()
我更喜欢 1),因为内存开销较小,而且它不包含其他依赖项。