Edit: the 推荐方式 https://stackoverflow.com/questions/8301947/what-is-the-difference-between-javaconverters-and-javaconversions-in-scala是使用JavaConverters
和.asScala
method:
import scala.collection.JavaConverters._
val myScalaMap = myJavaMap.asScala.mapValues(_.asScala)
请注意,您将从中获得可变映射。您可以随时使用.asScala.toMap
如果你想要不可变的。
原来的答案是JavaConversions
:
简短的答案是:打电话.mapValues
在外部地图上转换内部地图:
import scala.collection.JavaConversions._
val myScalaMap = myJavaMap.mapValues(_.toMap)
.mapValues
强制将外部映射转换为 scalaMap
and .toMap
强制将内部映射转换为 scala (不可变的) 地图。不可变的部分并不是绝对必要的,但无论如何......
这非常类似于这个答案 https://stackoverflow.com/a/16920087/738138。简短的例子:
scala> val a: java.util.Map[String, java.util.Map[String, String]] = new java.util.HashMap[String, java.util.Map[String, String]]
a: java.util.Map[String,java.util.Map[String,String]] = {}
scala> import scala.collection.JavaConversions._
import scala.collection.JavaConversions._
scala> val myScalaMap = a.mapValues(_.toMap)
myScalaMap: scala.collection.Map[String,scala.collection.immutable.Map[String,String]] = Map()