scala 迭代 java hashSet
scala iterate java hashSet
我想知道如何在 Scala 中以惯用的方式迭代 java.util.HashSet
。目前,我在 while 循环中使用 java 迭代器,这似乎不太好。
此外,我想知道可变可增长缓冲区是否有效,或者是否有可能避免创建不必要的对象。
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
会更好吗?
由于您显然使用的是 Java HashSet
,请先执行此操作:
import scala.collection.JavaConverters._
这让您可以将 Java 集合转换为 Scala 集合,使用 asScala
。
因此,如果您有一个名为 set
的 HashSet
实例,您可以这样做:
set.asScala.map(value => doSomething(value))
或者任何您想做的事情,例如 filter
、foldLeft
等
仅供参考,上面的示例可以在语法上加糖:
set.asScala.map(doSomething)
我想知道如何在 Scala 中以惯用的方式迭代 java.util.HashSet
。目前,我在 while 循环中使用 java 迭代器,这似乎不太好。
此外,我想知道可变可增长缓冲区是否有效,或者是否有可能避免创建不必要的对象。
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
会更好吗?
由于您显然使用的是 Java HashSet
,请先执行此操作:
import scala.collection.JavaConverters._
这让您可以将 Java 集合转换为 Scala 集合,使用 asScala
。
因此,如果您有一个名为 set
的 HashSet
实例,您可以这样做:
set.asScala.map(value => doSomething(value))
或者任何您想做的事情,例如 filter
、foldLeft
等
仅供参考,上面的示例可以在语法上加糖:
set.asScala.map(doSomething)