如何使用/轉換地圖到斯卡拉地圖[字符串,任何]?如何使用java Map <String,Object>需要scala Map [String,Any]嗎?
Java對象在scala中被識別爲AnyRef。
是否有任何一行轉換可用?我想避免迭代新創建的Scala Map和複製參考。
在此先感謝。
如何使用/轉換地圖到斯卡拉地圖[字符串,任何]?如何使用java Map <String,Object>需要scala Map [String,Any]嗎?
Java對象在scala中被識別爲AnyRef。
是否有任何一行轉換可用?我想避免迭代新創建的Scala Map和複製參考。
在此先感謝。
可能是這樣的:
val jmap = new HashMap[String, Object]
jmap.put("1", new Date)
import scala.collection.JavaConverters._
val smap = jmap.asScala.mapValues(_.asInstanceOf[Any]).toMap
test(smap)
def test(m: Map[String, Any]): Unit = {
println(m)
}
另外要注意,java.lang.Object
相當於AnyRef
在Scala中,不Any
。
這應該工作:
import scala.collection.JavaConversions._
val javaMap = new HashMap[String,Object]
val scalaMap: Map[String,Any] = javaMap.toMap
或者,如果你不喜歡 「的implicits神奇的」,這樣做:
import scala.collection.JavaConverters._ // note, this is a different import
val javaMap = new HashMap[String, Object]
val scalaMap: Map[String, Any] = javaMap.asScala.toMap // this .asScala is what the other version does implicitly
還要注意,到底是toMap
因爲javaMap.asScala
返回mutable.Map
,Map[String,Any]
默認默認爲immutable.Map
。 如果使用scala.collection.Map
相反,你不需要它:
import scala.collection.Map
import scala.collection.JavaConversions._
val javaMap = HashMap[String, Object]
val scalaMap: Map[String,Any] = javaMap // voila!
或明確
import scala.collection.Map
import scala.collection.JavaConverters._
val javaMap = HashMap[String, Object]
val scalaMap: Map[String, Any] = javaMap.asScala