web-dev-qa-db-ja.com

Java Map in Scala 2.8.0を反復処理する新しい方法は何ですか?

scala.collection.JavaConversionsは、Stack Overflowの質問Iterating over Java Collections in Scala(「jcl」パッケージがなくなったため機能しません)およびScalaを使用したマップの反復(複雑なテストでは機能しません。後で要約してここに投稿しようとします)。

後者は実際にはScalaマップの質問ですが、Java.util.Mapを繰り返すには、両方の答えを知る必要があると思います。

36
Alex R

2.8では、scala.collection.JavaConversions._をインポートし、Scalaマップとして使用します。例(2.8.0.RC1)を次に示します。

scala> val jmap:Java.util.Map[String,String] = new Java.util.HashMap[String,String]  
jmap: Java.util.Map[String,String] = {}

scala> jmap.put("Hi","there")
res0: String = null

scala> jmap.put("So","long")
res1: String = null

scala> jmap.put("Never","mind")
res2: String = null

scala> import scala.collection.JavaConversions._
import scala.collection.JavaConversions._

scala> jmap.foreach(kv => println(kv._1 + " -> " + kv._2))
Hi -> there
Never -> mind
So -> long

scala> jmap.keys.map(_.toUpperCase).foreach(println)
HI
NEVER
SO

特にScalaイテレータが必要な場合は、jmap.iteratorを使用します(変換のインポート後)。

80
Rex Kerr