查找两个节点之间的路径,而不提及要迭代的循环数

时间:2015-05-18 07:22:20

标签: java playframework orientdb gremlin

这里的情况,我只是不想在java中外部循环以获取gremlin查询。就像我想要获取所有路径,或者更确切地说是两个独立节点之间的节点/边缘的名称。 这里带循环的第一个查询是

ThreadPoolExecutor

在java中转换哪些代码已经占用了很多!

但是在上述情况下,有一个循环,循环100个节点。如果我尝试遍历任何大量的节点。或者计数对我来说是不可数的那么完整的遍历将如何?

这里我有一个建议,如:(Name of the first Node).loop(1){it.loops<100}{true}.has('name', (Name of the second node)).path{it.name}

它如何直接在java中运行?我想避免groovy!

1 个答案:

答案 0 :(得分:2)

如果你不知道要循环的步骤数,你可以这样做:

g.v(100).out.loop(1){true}.path

loop之后的第一个闭包表示一个接受循环元数据并返回一个布尔值的函数,该布尔值决定是否继续循环过程(true)或终止(false )。当我简单地返回上面的true时,循环将不会停止,直到所有路径都耗尽为止。当然,问题在于如果图形循环,遍历将无限期地迭代。因此,如果您确定您的图形结构不会陷入该陷阱,则只能安全地{true}

最好只需要一个合理大小的最大循环长度,以便遍历终止。或者,您可以使用其他一些智能方法来管理循环终止。也许你可以在检测到一些cycles之后终止循环。

至于想要一个Java答案而不是一个常规答案,我建议你阅读this answer关于这个主题的内容。它解释了如何将groovy转换为java。对于您的具体问题,这里是java:

new GremlinPipeline(g.getVertex(100)).out().loop(1, 
    new PipeFunction<LoopPipe.LoopBundle<Vertex>,Boolean>() {
        public Boolean compute(LoopPipe.LoopBundle<Vertex> argument) {
            return true;
        }
    }, closure)