最惯用的迭代和添加功能设置的方法

Most idiomatic way to iterate through and add to set functionally

我正在使用 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
}

Try it out!

如果您确实需要 Java Set.

,稍后您仍然可以在 Set[Vertex] 上调用 .asJava