我有以下代码片段,用于查找两个节点之间的最短路径:
GremlinPipeline<String, List> pathPipe = new GremlinPipeline<String, List>(v1)
.as("similar")
.out("similar")
.loop("similar", new PipeFunction<LoopBundle<Vertex>, Boolean>() {
//@Override
public Boolean compute(LoopBundle<Vertex> bundle) {
return bundle.getLoops() < 5 && bundle.getObject() != v2;
}
})
.path()
现在我想知道如何打印结果。我试试这个:
迭代器 iter = pathPipe.iterator(); while(iter.hasNext()) { System.out.println(iter.next()); }
但我有以下奇怪的结果:
[v[#9:0], v[#9:1], v[#9:0]]
[v[#9:0], v[#9:1], v[#9:2]]
[v[#9:0], v[#9:1], v[#9:3]]
[v[#9:0], v[#9:1], v[#9:4]]
[v[#9:0], v[#9:1], v[#9:5]]
[v[#9:0], v[#9:1], v[#9:6]]
[v[#9:0], v[#9:1], v[#9:7]]
[v[#9:0], v[#9:1], v[#9:8]]
[v[#9:0], v[#9:1], v[#9:9]]
[v[#9:0], v[#9:1], v[#9:10]]
[v[#9:0], v[#9:1], v[#9:11]]
[v[#9:0], v[#9:1], v[#9:12]]
[v[#9:0], v[#9:1], v[#9:13]]
[v[#9:0], v[#9:1], v[#9:14]]
[v[#9:0], v[#9:1], v[#9:15]]
[v[#9:0], v[#9:1], v[#9:16]]
请注意,我正在尝试找到节点 v[#9:0] 和 v[#9:1] 之间的最短路径。
我的查找最短路径代码有问题吗?还是有其他方法可以打印我的结果?
我使用面向1.6.2。
最佳答案
我的 gremlin-java/pipeline 不如我的 gremlin-groovy,但我看到的一个问题是你没有在 Java 中正确处理顶点相等性。这部分:
&& bundle.getObject() != v2
对于 Groovy 有效,但在 Java 中我会将其写为:
&& !bundle.getObject().equals(v2)
关于java - OrientDB 的 GremlinPipeline 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22712836/