編集:推奨される方法は、使用することJavaConverters
であり、.asScala
方法は次のとおりです。
import scala.collection.JavaConverters._
val myScalaMap = myJavaMap.asScala.mapValues(_.asScala.toSet)
これには、魔法のような暗黙的な変換を使用するのではなく、 への明示的な呼び出しを使用するという利点がありますが.asScala
、クリーンで簡潔なままです。
元の回答JavaConversions
:
scala.collection.JavaConversions
Java と Scala の間で暗黙的に変換するために使用できます。
import scala.collection.JavaConversions._
val myScalaMap = myJavaMap.mapValues(_.toSet)
を呼び出すと、Javaから scala へmapValues
の暗黙的な変換がトリガーされ、Java コレクションを呼び出すと暗黙的にそれが scala コレクションに変換され、次に.Map
Map
toSet
Set
デフォルトでは、 mutableMap
を返します。追加の.toMap
.
短い例:
scala> val a: java.util.Map[String, java.util.Collection[String]] = new java.util.HashMap[String, java.util.Collection[String]]
a: java.util.Map[String,java.util.Collection[String]] = {}
scala> val b = new java.util.ArrayList[String]
b: java.util.ArrayList[String] = []
scala> b.add("hi")
res5: Boolean = true
scala> a.put("a", b)
res6: java.util.Collection[String] = []
scala> import scala.collection.JavaConversions._
import scala.collection.JavaConversions._
scala> val c = a.mapValues(_.toSet)
c: scala.collection.Map[String,scala.collection.immutable.Set[String]] = Map(a -> Set(hi))
scala> c.toMap
res7: scala.collection.immutable.Map[String,scala.collection.immutable.Set[String]] = Map(a -> Set(hi))