Come iterare su hashmap in Kotlin?


Risposte:


213

Non è così difficile:

for ((key, value) in map) {
    println("$key = $value")
}

OPPURE
( aggiornato in base alle informazioni di @ RuckusT-Boom e @ KenZira .)

 map.forEach { (key, value) -> println("$key = $value") }

38
Vale la pena notare che la seconda versione può causare problemi su Android, quindi potresti voler utilizzaremap.forEach { (key, value) -> println("$key = $value") }
Ruckus T-Boom

1
@ RuckusT-Boom in che modo causa problemi?
Anigif

7
Android non ha (o non aveva al momento di quel commento) il pieno supporto per Java 8, e il secondo esempio è una chiamata Java 8. La chiamata equivalente che utilizza la destrutturazione di Kotlin sembra molto simile, ma sono necessarie parentesi attorno agli argomenti { (key, value) -> ... }. Ken Zira ha più informazioni nella sua risposta.
Ruckus T-Boom

1
Abbiamo scoperto nel modo più duro che il modo di @ RuckusT-Boom è migliore su Android :) (A causa di un'eccezione ClassNotFoundException, abbiamo difficoltà a capire)
Micha

1
@ La risposta di RuckusT-Boom è quella corretta, abbiamo riscontrato questo problema durante i test di rilascio su diversi livelli di API e non era molto chiaro il motivo per cui si stava bloccando, anche il messaggio di errore è fuorviante
Alaa Eddine Cherbib

64

Per la risposta sopra, fai attenzione con Androidsotto N!

map.forEach { key, value -> println("$key = $value") }

riferimento a Java 8api che porta a:

Rejecting re-init on previously-failed class java.lang.Class<T>

map.forEach { (key, value) -> println("$key = $value") }

è Kotlincaratteristica


Sì, ho sprecato anche mezza giornata in questo. for ((key, val) ...) ha risolto il problema.
andude

2

Un altro modo che non è stato menzionato è:

val mapOfItems = hashMapOf(1 to "x", 2 to "y", -1 to "zz")
mapOfItems.map { (key, value) -> println("$key = $value") }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.