将java.util.Map[String,Object]转换为scala.collection.immutable.Map[String,Any]

将java.util.Map[String,Object]转换为scala.collection.immutable.Map[String,Any],java,scala,scala-collections,Java,Scala,Scala Collections,如何将java.util.Map[String,Object]转换为scala.collection.immutable.Map[String,Any],以便将原始映射中的所有值(整数、布尔值等)转换为正确的值,以便在scala中正常工作 Scala2.8的包只处理可变集合 图书馆在这里可能会有所帮助 java.util.Map[A, B] #asScala: scala.collection.Map[A, B] #asScalaM

如何将java.util.Map[String,Object]转换为scala.collection.immutable.Map[String,Any],以便将原始映射中的所有值(整数、布尔值等)转换为正确的值,以便在scala中正常工作

Scala2.8的包只处理可变集合

图书馆在这里可能会有所帮助

java.util.Map[A, B]       #asScala: scala.collection.Map[A, B]
                          #asScalaMutable: scala.collection.mutable.Map[A, B]
                          #foreach(((A, B)) => Unit): Unit

正如VonC所说,
scala.collections.JavaConversion
只支持可变集合,但您不必使用单独的库。可变集合源自
TraversableOnce
,它定义了一个
toMap
方法,该方法返回一个不可变映射:

import scala.collection.JavaConversions._

val m = new java.util.HashMap[String, Object]()
m.put("Foo", java.lang.Boolean.TRUE)
m.put("Bar", java.lang.Integer.valueOf(1))

val m2: Map[String, Any] = m.toMap
println(m2)
这将输出

Map(Foo -> true, Bar -> 1)

为了将java.util.Map[String,Object]转换为scala.collection.immutable.Map[String,Object],您需要在scala项目中简单地导入下面的语句并清理构建

import collection.JavaConversions._
请参阅以下代码:

var empMap= Map[String.Object]()
var emp= new Employee(empMap)  // Employee is java  POJO in which,passing scala map  to overloaded constructor for setting default values.

我不知道scala,但是如果(objecdt instanceof Integer)…,你就不能这样做吗。。。等等这不是最好的方法,但应该有效。。。也许您可以包装对象并使用访问者模式……JavaConversions只是映射映射对象本身,而不是它的值,这回答了我的问题。在我更具体的例子中,我需要映射映射图的值,因此m.map{…}(breakOut)也起到了作用