2010-04-25 10 views
34

¿Cómo scala.collection.JavaConversions sustituyen las respuestas dadas en cuestión de desbordamiento de pila Iterating over Java collections in Scala (que no funciona porque el paquete "JCL" se ha ido) y en Iterating over Map with Scala (que no funciona para mí en una prueba complicada que he Trataremos de hervir y publicar aquí más tarde).¿Cuál es la nueva forma de iterar sobre un mapa Java en Scala 2.8.0?

La última es en realidad una pregunta del Mapa de Scala, pero creo que necesito conocer ambas respuestas para poder repetir un java.util.Map.

Respuesta

74

En 2.8, importa scala.collection.JavaConversions._ y utiliza como un mapa de Scala. He aquí un ejemplo (en 2.8.0.RC1):

scala> val jmap:java.util.Map[String,String] = new java.util.HashMap[String,String] 
jmap: java.util.Map[String,String] = {} 

scala> jmap.put("Hi","there") 
res0: String = null 

scala> jmap.put("So","long") 
res1: String = null 

scala> jmap.put("Never","mind") 
res2: String = null 

scala> import scala.collection.JavaConversions._ 
import scala.collection.JavaConversions._ 

scala> jmap.foreach(kv => println(kv._1 + " -> " + kv._2)) 
Hi -> there 
Never -> mind 
So -> long 

scala> jmap.keys.map(_.toUpperCase).foreach(println) 
HI 
NEVER 
SO 

Si desea específicamente un iterador de Scala, utilice jmap.iterator (después de las conversiones de importación).

+0

¡Guau, esta es una solución genial e indolora! – rasen58

+0

Debe haber una forma sin convertir a scala map, ¿verdad? Será mejor si estamos iterando sobre el mapa de Java en un bucle, evitará la creación innecesaria de objetos. Obteniendo "encontrado: (String, String) => Unidad requerido: java.util.function.BiConsumer [_>: String, _>: String]" error. –

+0

@ZxcvMnb - En estos días debes usar 'JavaConverters' y cambiarlos explícitamente; con la adición de Java 8 de un método 'foreach', ya no puede usar la conversión implícita para 'foreach'. –

Cuestiones relacionadas