2011-10-31 13 views
9

Tengo una Lista de objetos, cada objeto con dos campos de interés que llamaré "clave" y "valor". De ahí necesito construir un HashMap compuesto por entradas donde "clave" se asigna a "valor".Crear un HashMap en Scala a partir de una lista de objetos sin bucle

Sé que se puede hacer al recorrer la lista y llamar al hmap.put(obj.key, obj.value) para cada elemento de la lista. Pero de alguna manera "huele" así se puede hacer en una línea simple de código usando map o flatMap o alguna otra mezcla de operaciones de la lista de Scala, con una construcción funcional allí. ¿"Huelo" bien, y cómo se haría?

Respuesta

17
list.map(i => i.key -> i.value).toMap 
+4

PO quiere una '' no es un HashMap' Map' – samthebest

+1

Advertencia: ¡No admite claves duplicadas! –

8

también:

Map(list map (i => i.key -> i.value): _*) 
+0

Supongo que la ventaja de esto es que puede especificar el tipo de mapa que necesita, por lo que es un patrón más general –

+1

@LuigiPlinge Eso es cierto. Prefiero usar '.toMap', ya que es mucho más legible. Si el rendimiento es una gran preocupación, _maybe_ use 'breakOut'. –

+0

Estoy perdido con la última parte: _ * Veo que el guión bajo es un marcador de posición para la variable funcional, pero no puedo ver cómo encaja en esa expresión, ni el papel del asterisco y el colon en ese contexto . – Gigatron

4

Para crear a partir de una colección (Recuerde que no debe tener una palabra clave new)

val result: HashMap[Int, Int] = HashMap(myCollection: _*) 
Cuestiones relacionadas