編輯:推薦的方法是使用現在JavaConverters
和.asScala
方法:
import scala.collection.JavaConverters._
val myScalaMap = myJavaMap.asScala.mapValues(_.asScala.toSet)
這有沒有使用神奇隱式轉換而顯式調用.asScala
的優勢,同時保持乾淨和consise。
原來的答案與JavaConversions
:
您可以使用scala.collection.JavaConversions
隱式的Java和Scala之間的轉換:
import scala.collection.JavaConversions._
val myScalaMap = myJavaMap.mapValues(_.toSet)
調用mapValues
將觸發從Java Map
到的隱式轉換一個scala Map
,然後隱式地在java集合上調用toSet
將其轉換爲Scala集合,然後轉換爲Set
。
默認情況下,它返回一個可變的Map
,你可以得到一個不可變的.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))
看看這個帖子:http://stackoverflow.com/questions/3127238/convert-java-util-mapstring-object-to-scala- collection-immutable-mapstring –
and this page:http://www.scala-lang.org/docu/files/collections-api/collections_46.html –
@LutherBlisset:它與mapAsScalaMap具有相同的結果:Map [SomeObject,java .util.Collection [OtherObject]] – Ha11owed