1

我正在使用 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 执行此操作的方法可能是使用尾递归,但我不确定这样做是否有任何性能优势,并且在这一点上,最后一次转换为不可变可能无论如何都更具可读性。

此外,如果有更好的方法来收集遍历中的所有顶点,我也愿意接受这种优化。

4

1 回答 1

3

如果您可以使用 ScalaSet而不是 Java,请使用:

import collection.JavaConverters._

def getVertexSet(vIter: GraphTraversal[Vertex, Vertex]): Set[Vertex] = {
    vIter.asInstanceOf[java.util.Iterator[Vertex]].asScala.toSet
}

试试看!

如果您真的需要 Java ,.asJava您仍然可以稍后调用。Set[Vertex]Set

于 2018-12-06T15:13:51.520 回答