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

标签 java playframework orientdb gremlin

这里的情况,我只是不想在 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/

相关文章:

java - 使用字符串数组声明 java 枚举

java - 文本读取和替换算法

java - 无法运行 Activator 模板项目 Activator UI 无法加载 SBT 配置

java - OrientDB - 插入后不释放内存

java - Android 通过单击不适用于 Galaxy 5 的按钮调用电话

java - 如何在android studio中导入具有库依赖项的eclipse android项目?

mysql - Scala/MySQL 列不能为空

java - PlayFramework:json 反序列化性能不佳

linux - orientdb 连接无效的密码和用户名

graph-theory - OrientDB:最短路径中的边