Скала итерации Java хэш-набор
Интересно, как идиоматически повторять java.util.HashSet
в Скале. В настоящее время я использую java-итераторы в цикле while, что не очень хорошо.
Кроме того, мне интересно, эффективен ли изменяемый растущий буфер или есть возможность избежать создания ненужных объектов.
import java.util
import scala.collection.generic.Growable
import scala.collection.mutable
val javaSet = new util.HashSet[String]()
javaSet.add("first")
javaSet.add("second")
val result: collection.Seq[String] with Growable[String] = mutable.Buffer[String]()
val itr = javaSet.iterator
while (itr.hasNext) {
result += itr.next
}
result
редактировать
Был бы stream
будь лучше? Apache Spark: эффективное использование mapPartitions в Java
1 ответ
Так как вы используете Java HashSet
по-видимому, сделайте это первым:
import scala.collection.JavaConverters._
Это позволяет вам превращать коллекции Java в коллекции Scala, с которыми гораздо проще работать, используя asScala
,
Так что если у вас есть экземпляр HashSet
называется set
, вы можете сделать это:
set.asScala.map(value => doSomething(value))
Или все, что вы хотите сделать, как filter
, foldLeft
, так далее.
К вашему сведению, приведенный выше пример может быть синтаксически подслащен следующим образом:
set.asScala.map(doSomething)