【问题标题】:Neo4j - traverse nodes in new API, starting from given labelNeo4j - 从给定标签开始遍历新 API 中的节点
【发布时间】:2015-04-15 15:46:15
【问题描述】:

在 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) 很接近,但它返回Iterator 而不是Iterable,而且我无法看到以Iterator 开始遍历,除非我将它包装在一个虚拟Iterable 或某物。谁有指点?

【问题讨论】:

    标签: java neo4j iterator iterable


    【解决方案1】:

    有(至少)两种方便的方法可以解决这个问题:

    1) 正如您所提到的,将Iterator 包装成Iterable。 Neo4j 开箱即用:

    import org.neo4j.helpers.collection.IteratorUtil;
    ...
    for (Path p : td.traverse(IteratorUtil.asIterable(it))) {
      ...
    }
    

    2) traverse 方法还接受 Node[] 数组(作为可变参数),因此您可以例如使用 Guava 的Iterables.toArray()

    我更喜欢 1),因为内存开销较小,并且不包含其他依赖项。

    【讨论】:

    • 太好了,我也喜欢第一种方式。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多