Самый идиоматичный способ перебора и добавления функционально - PullRequest
0 голосов
/ 06 декабря 2018

Я использую 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 голосов
/ 06 декабря 2018

Если у вас все в порядке с использованием Set в Scala вместо Java, выберите:

import collection.JavaConverters._

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

Попробуйте!

Вы все еще можете позвонить .asJava на Set[Vertex] позже, если вам действительно нужна Java Set.

...