How do I convert java.util.Map[String, Object] to scala.collection.immutable.Map[String, Any], so that all values in the original map (integers, booleans etc.) are converted to the right value to work well in Scala.
views:
99answers:
2
A:
The JavaConversions
package of Scala2.8 deals only with mutable collections.
The scalaj-collection library might help here.
java.util.Map[A, B] #asScala: scala.collection.Map[A, B]
#asScalaMutable: scala.collection.mutable.Map[A, B]
#foreach(((A, B)) => Unit): Unit
VonC
2010-06-27 12:19:31
JavaConversions is only mapping of the Map object itself, not its values
IttayD
2010-06-27 12:34:50
+3
A:
As VonC says, scala.collections.JavaConversion
supports mutable collections only, but you don't have to use a separate library. Mutable collections are derived from TraversableOnce
which defines a toMap
method that returns an immutable Map:
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)
This will output
Map(Foo -> true, Bar -> 1)
Michel Krämer
2010-06-27 12:39:32
That answers my question. In my more specific case, I needed to map over the values of the map, so m.map{...}(breakOut) also did the trick
IttayD
2010-06-27 12:48:15