遍历和添加功能设置的最惯用方式

时间:2018-12-06 14:59:01

标签: scala immutability gremlin immutable-collections

我正在使用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做到这一点的方法可能是使用尾部递归,但是我不确定这样做有什么性能上的好处,到那时,无论如何,最后一次将单次转换为不可变都可能更具可读性。

此外,如果有更好的方法可以从遍历中收集所有顶点,那么我也愿意进行这种优化。

1 个答案:

答案 0 :(得分:3)

如果可以使用Scala的Set而不是Java,请继续:

import collection.JavaConverters._

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

Try it out!

如果您确实需要Java .asJava,则以后仍然可以在Set[Vertex]上致电Set