我使用Gremlin迭代GraphTraversal
对象并检索顶点。
以下是我正在使用的内容:
def getVertexSet(vIter: GraphTraversal[Vertex, Vertex]): Set[Vertex] = {
val s = mutable.HashSet.empty[Vertex]
vIter.forEachRemaining(v => s.add(v))
s.toSet
}
我希望能够做到这一点,而无需从可变集合转换为不可变集合。我不知道迭代器是否可以做到这一点。Scala实现这一点的方法可能是使用尾部递归,但我不确定这是否有任何性能优势,而且在这一点上,最后一次转换为不可变可能更可读。
此外,如果有更好的方法从遍历中收集所有顶点,我也对这种优化持开放态度。
如果您可以使用Scala的Set
而不是Java的,请使用:
import collection.JavaConverters._
def getVertexSet(vIter: GraphTraversal[Vertex, Vertex]): Set[Vertex] = {
vIter.asInstanceOf[java.util.Iterator[Vertex]].asScala.toSet
}
试试看!
如果您确实需要一个JavaSet
,您以后仍然可以在Set[Vertex]
上调用.asJava
。