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),因为内存开销较小,而且它不包含其他依赖项。