如何使用java Map <string,object =“”>其中scala Map [String,Any]是必需的?</string,>

时间:2015-01-05 14:20:27

标签: java scala type-conversion

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

Java对象在scala中被识别为AnyRef。

是否有任何一线转换?我想避免迭代新创建的scala Map并复制refs。

提前致谢。

2 个答案:

答案 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

或者,如果你不喜欢&#34;暗示的魔力&#34;,请执行以下操作:

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