最惯用的迭代和添加功能设置的方法
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
}
如果您确实需要 Java Set
.
,稍后您仍然可以在 Set[Vertex]
上调用 .asJava
我正在使用 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
}
如果您确实需要 Java Set
.
Set[Vertex]
上调用 .asJava