2010-06-27 11 views
27

Comment puis-je convertir java.util.Map [String, Object] en scala.collection.immutable.Map [ String, Any], de sorte que toutes les valeurs de la carte d'origine (entiers, booléens, etc.) soient converties à la bonne valeur pour bien fonctionner dans Scala.convertir java.util.Map [String, Object] en scala.collection.immutable.Map [String, Any]

+0

a ajouté des tags ----- – pakore

+0

Je ne sais pas scala, mais ne pouvez pas vous faire si (objecdt instanceof entier) ... et sur? Ce n'est pas la meilleure approche mais elle devrait fonctionner ... Peut-être que vous pouvez envelopper les objets et utiliser le modèle de visiteur ... – pakore

Répondre

32

Comme le dit VonC, scala.collections.JavaConversion soutient collections mutables seulement, mais vous ne devez pas utiliser une bibliothèque séparée. collections mutables sont dérivées de TraversableOnce qui définit une méthode toMap qui retourne une carte immuable:

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) 

Affichera

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

Cela répond à ma question. Dans mon cas plus spécifique, j'ai dû cartographier les valeurs de la carte, donc m.map {...} (breakOut) a aussi fait l'affaire – IttayD

+0

Nice - ça a marché pour moi! – javadba

1

Le package JavaConversions de Scala2.8 ne traite que des collections mutables.

La bibliothèque scalaj-collection peut vous aider.

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 est seulement mappage de l'objet Map lui-même, pas ses valeurs – IttayD

1

Afin de convertir convertir java.util.Map [String, Object] pour scala.collection.immutable.Map [String, Object], vous devez simplement importer l'instruction ci-dessous dans Scala Project et nettoyer la construction.

import collection.JavaConversions._ 

Rapportez-vous au code:

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. 
Questions connexes