2010-06-27 18 views
27

Cómo convierto java.util.Map [String, Object] en scala.collection.immutable.Map [ String, Any], de modo que todos los valores en el mapa original (enteros, booleanos, etc.) se convierten al valor correcto para que funcionen bien en Scala.convertir java.util.Map [String, Object] en scala.collection.immutable.Map [String, Any]

+0

etiquetas Añadido ----- – pakore

+0

no sé Scala, pero no se puede hacer si (objecdt instanceof entero) ... y así ¿en? No es el mejor enfoque, pero debería funcionar ... Tal vez pueda envolver los objetos y usar el patrón de visitante ... – pakore

Respuesta

32

Como dice VonC, scala.collections.JavaConversion apoya colecciones mutables solamente, pero usted no tiene que utilizar una biblioteca independiente. colecciones mutables se derivan de TraversableOnce que define un método toMap que devuelve un Mapa inmutable:

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) 

Esta voluntad salida

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

Eso responde mi pregunta. En mi caso más específico, necesité hacer un mapa de los valores del mapa, por lo que m.map {...} (breakOut) también hizo el truco – IttayD

+0

Nice - ¡eso funcionó para mí! – javadba

1

El paquete JavaConversions de Scala2.8 se aplica solo a las colecciones mutables.

La biblioteca scalaj-collection puede ayudar aquí.

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

JavaConversions es solo un mapeo del objeto Map en sí, no sus valores – IttayD

1

el fin de convertir convertir java.util.Map [String, Object] para scala.collection.immutable.Map [String, Object], necesita importar una instrucción a continuación en Scala Project y limpiar compilación.

import collection.JavaConversions._ 

se refieren debajo de código:

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. 
Cuestiones relacionadas