如何使用/转换Map到scala Map [String,Any]?
Java对象在scala中被识别为AnyRef。
是否有任何一线转换?我想避免迭代新创建的scala Map并复制refs。
提前致谢。
答案 0 :(得分:3)
可能是这样的:
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
相当于Scala中的AnyRef
,而不是Any
。
答案 1 :(得分:3)
这应该有效:
import scala.collection.JavaConversions._
val javaMap = new HashMap[String,Object]
val scalaMap: Map[String,Any] = javaMap.toMap
或者,如果你不喜欢"暗示的魔力",请执行以下操作:
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