Скала итерации 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)
Другие вопросы по тегам