【发布时间】:2015-03-03 02:30:28
【问题描述】:
如何使用/转换 Map 到 scala Map[String, Any]?
Java 对象在 scala 中被识别为 AnyRef。
是否有任何可用的单行转换?我想避免迭代新创建的 scala Map 并复制参考。
提前致谢。
【问题讨论】:
标签: java scala type-conversion
如何使用/转换 Map 到 scala Map[String, Any]?
Java 对象在 scala 中被识别为 AnyRef。
是否有任何可用的单行转换?我想避免迭代新创建的 scala Map 并复制参考。
提前致谢。
【问题讨论】:
标签: java scala type-conversion
可能是这样的:
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。
【讨论】:
这应该可行:
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
【讨论】: