2010-06-27 15 views
27

Come convertire java.util.Map [String, Object] in scala.collection.immutable.Map [ String, Any], in modo che tutti i valori nella mappa originale (interi, booleani ecc.) Vengano convertiti nel valore corretto per funzionare bene in Scala.convertire java.util.Map [String, Object] in scala.collection.immutable.Map [String, Any]

+0

tag aggiunti ----- – pakore

+0

non so Scala, ma non si può fare se (objecdt instanceof intero) ... e così sopra? Non è l'approccio migliore ma dovrebbe funzionare ... Forse puoi avvolgere gli oggetti e usare il modello di visitatore ... – pakore

risposta

32

Come dice VonC, scala.collections.JavaConversion supporta collezioni mutabili solo, ma non c'è bisogno di utilizzare una libreria separata. collezioni mutevoli sono derivati ​​da TraversableOnce che definisce un metodo che restituisce un toMap immutabile Mappa:

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) 

Questa volontà di uscita

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

Questo risponde alla mia domanda. Nel mio caso più specifico, avevo bisogno di mappare i valori della mappa, quindi m.map {...} (breakOut) ha fatto anche il trucco – IttayD

+0

Nice - che ha funzionato per me! – javadba

1

Il pacchetto JavaConversions di Scala2.8 tratta solo con raccolte modificabili.

La libreria scalaj-collection potrebbe essere d'aiuto.

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 sta solo mappando l'oggetto Map stesso, non i suoi valori – IttayD

1

Al fine di convertire convertire java.util.Map [String, Object] per scala.collection.immutable.Map [String, Object], è necessario importare in modo semplice sotto istruzione in Scala Project e clean build.

import collection.JavaConversions._ 

riferisca a sotto il codice:

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. 
Problemi correlati