这里的情况,我只是不想在 java 中外部循环 gremlin 查询。就像我想获取所有路径或者两个单独节点之间的节点/边的名称。 这里第一个带循环的查询是
(Name of the first Node).loop(1){it.loops<100}{true}.has('name', (Name of the second node)).path{it.name}
在java中转换它需要大量代码!
但在上述情况下,存在一个循环 100 个节点的循环。如果我尝试遍历任意大量节点。或者计数对我来说是不可数的,那么完整的遍历将如何?
这里我有一个建议,例如:g.v(100).out.loop(1) { it.object != g.v(200) }.path
它如何在java中直接工作?我想避免 groovy!
最佳答案
如果您不知道循环的步骤数,您可以这样做:
g.v(100).out.loop(1){true}.path
循环
之后的第一个闭包表示一个接受循环元数据并返回一个 boolean 值的函数,该 boolean 值决定是否继续循环过程(true
)或终止(假
)。由于我只是在上面返回 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)
关于java - 查找两个节点之间的路径,而不提及要迭代的循环次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30297239/