如何在需要scala Map[String, Any]时使用java Map<String, Object>?

4

如何使用/转换Map为scala Map [String,Any]?

在Scala中,Java对象被认为是AnyRef。

是否有一行代码的转换方式?我想避免迭代新创建的scala Map并复制引用。

提前致谢。

2个回答

4
也许是这样:
  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)
  }

请注意,在Scala中,java.lang.Object等同于AnyRef,而不是Any


4
这应该可以工作:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接