2011-10-31 7 views
9

Ho una lista di oggetti, ogni oggetto con due campi di interesse che chiamerò "chiave" e "valore". Da quello ho bisogno di costruire una HashMap composta da voci in cui "chiave" mappa per "valore".Creare una HashMap in Scala da un elenco di oggetti senza loop

So che può essere fatto collegando l'elenco e chiamando hmap.put(obj.key, obj.value) per ogni elemento nell'elenco. Ma in qualche modo "odori" come questo può essere fatto in una semplice riga di codice usando map o flatMap o qualche altra combinazione di operazioni Lista di Scala, con un costrutto funzionale in là. Ho "annusato" bene, e come sarebbe stato fatto?

risposta

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

OP vuole un 'HashMap' non un' Map' – samthebest

+1

Attenzione: Non supporta chiavi duplicate! –

8

anche:

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

Suppongo che il vantaggio di questo sia che puoi specificare il tipo di mappa che ti serve, quindi è più generico il modello –

+1

@LuigiPlinge Questo è vero. Preferisco di gran lunga usare '.toMap', poiché è molto più leggibile. Se le prestazioni sono di grande interesse, _maybe_ usa 'breakOut'. –

+0

Mi sono perso con quest'ultima parte: _ * Ho capito che il trattino basso è un segnaposto per la variabile funzionale, ma non riesco a vedere come si adatta a quell'espressione, né il ruolo dell'asterisco e del colon in quel contesto . – Gigatron

4

Per creare da una collezione (ricordarsi di non avere una parola chiave new)

val result: HashMap[Int, Int] = HashMap(myCollection: _*) 
Problemi correlati