Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当分配给变量时,我能否以某种方式重用Gremlin GraphTraversals代码?_Java_Gremlin - Fatal编程技术网

Java 当分配给变量时,我能否以某种方式重用Gremlin GraphTraversals代码?

Java 当分配给变量时,我能否以某种方式重用Gremlin GraphTraversals代码?,java,gremlin,Java,Gremlin,我有这样的GraphTraversals(属性组: GraphTraversal<Vertex,Edge> attrGroupTraversal = some code generates it; List<Vertex> attributeVs = attrGroupTraversal.inV().out(EdgeLabels.ContainsAttribute).toList(); List<Vertex> sourceVs = attrGroupTra

我有这样的GraphTraversals(属性组:

GraphTraversal<Vertex,Edge> attrGroupTraversal = some code generates it; 
List<Vertex> attributeVs = attrGroupTraversal.inV().out(EdgeLabels.ContainsAttribute).toList();
List<Vertex> sourceVs = attrGroupTraversal.inV().out(EdgeLabels.ContainsSource).toList();
List<Vertex> targetVs = attrGroupTraversal.out(EdgeLabels.ContainsTarget).toList();
GraphTraversal attrGroupTraversal=某些代码生成它;
List attributeVs=attrGroupTraversal.inV().out(EdgeLabels.ContainsAttribute.toList();
List sourceVs=attrGroupTraversal.inV().out(EdgeLabels.ContainsSource.toList();
List targetVs=attrGroupTraversal.out(EdgeLabels.ContainsTarget.toList();
有没有办法重用attrGroupTraversal,这样我就不需要重新运行最初创建它的代码

我得到:

IllegalStateException:遍历策略已完成 并且遍历不再能够被调制

位于org.apache.tinkerpop.gremlin.process.traversal.traversal$Exceptions.traversalIsLocked(traversal.java:245) 在 org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.addStep(DefaultTraversal.java:274) 位于org.apache.tinkerpop.gremlin.process.traversal.traversal$Admin.addStep(traversal.java:301) 在 org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal$Admin.addStep(GraphTraversal.java:170) 在 org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.inV(GraphTraversal.java:384)


我假设您在第二次调用“inV(…)”时得到了异常。异常告诉您已经完成了遍历

如果几个gremlin调用变得昂贵(我假设这是您试图避免的),您可以绕过gremlin(如果底层图形允许您这样做),直接使用javaapi

这样,您可以根据需要选择任意多的v和e

我建议您
.clone()
原始遍历。 以下方面应起作用:

GraphTraversal<Vertex,Edge> attrGroupTraversal = some code generates it; 
List<Vertex> attributeVs = attrGroupTraversal.clone().inV().out(EdgeLabels.ContainsAttribute).toList();
List<Vertex> sourceVs = attrGroupTraversal.clone().inV().out(EdgeLabels.ContainsSource).toList();
List<Vertex> targetVs = attrGroupTraversal.clone().out(EdgeLabels.ContainsTarget).toList();
GraphTraversal attrGroupTraversal=某些代码生成它;
List attributeVs=attrGroupTraversal.clone().inV().out(EdgeLabels.ContainsAttribute.toList();
List sourceVs=attrGroupTraversal.clone().inV().out(EdgeLabels.ContainsSource.toList();
List targetVs=attrGroupTraversal.clone().out(EdgeLabels.ContainsTarget.toList();
另请参见:来自TinkerPop文档配方。

尝试以下方法:

GraphTraversal t=graph.traversal().V().has(“类型”、“组件”)

GraphTraversal newT=t.asAdmin().clone()

这救了我一天


信用证:

方法是避免“复制和粘贴”代码的有用工具。你是在暗示我没有考虑创建一个方法来进行新的遍历吗?:p如果我告诉你这个变量是从其他代码传递的,所以我实际上无法为它创建一个方法,因为它的实际形状事先不知道..更改代码以反映这一点..this没有帮助-我不关心此时对服务器的多次调用,我会使用
select()
/
by())
一步到位,就像这里:。我想要的基本上是能够重用我不知道其形状的同一个小精灵代码,并从正在传递的输入中创建新的遍历结果。我尝试了它,它说
clone()
受保护。。只有当我做了
asAdmin()。clone()
让我来编译它,我不确定asAdmin对于TinkerPop v3.2.3,
.clone()的意义
是重用遍历的标准方法。您使用哪个版本?我建议您尝试从Gremlin控制台用一个简单的图形进行克隆,然后从那里进行迭代。从外部maven库中,我确实使用了3.2.3..但是包是通过DataStax DSE pom.xml获取的。但我仍然不确定为什么会出现问题
.clone()
是在TinkerPop中重用
遍历
实例的标准方法。您能想出更多可能有用的细节吗?“不工作”不提供任何指针。使用指向解决方案的链接进行注释而不是向下投票可能是一种更好的帮助方法。