Wie iteriere ich über Hashmap in Kotlin?

89

Wie iteriere ich über HashMap in Kotlin?

typealias HashMap<K, V> = HashMap<K, V> (source)
Nomi
quelle

Antworten:

205

Es ist nicht so schwierig:

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

ODER
( Aktualisiert gemäß den Informationen von @ RuckusT-Boom und @ KenZira .)

 map.forEach { (key, value) -> println("$key = $value") }
Alexander Romanov
quelle
38
Es ist erwähnenswert, dass die zweite Version Probleme unter Android verursachen kann, daher sollten Sie sie verwendenmap.forEach { (key, value) -> println("$key = $value") }
Ruckus T-Boom
1
@ RuckusT-Boom inwiefern verursacht es Probleme?
Anigif
7
Android hat (oder zum Zeitpunkt dieses Kommentars) keine vollständige Unterstützung für Java 8, und das zweite Beispiel ist ein Java 8-Aufruf. Der entsprechende Aufruf mit Kotlin-Destrukturierung sieht sehr ähnlich aus, aber Sie benötigen Klammern um die Argumente { (key, value) -> ... }. Ken Zira hat weitere Informationen in seiner Antwort.
Ruckus T-Boom
1
Wir haben herausgefunden, wie schwierig es ist, dass @ RuckusT-Boom auf Android besser ist :) (Aufgrund einer ClassNotFoundException fällt es uns schwer, das herauszufinden)
Micha
1
@ RuckusT-Boom Antwort ist die richtige, wir hatten dieses Problem während Release-Tests auf verschiedenen API-Ebenen, und es war nicht sehr klar, warum es abstürzte, die Fehlermeldung ist auch irreführend
Alaa Eddine Cherbib
64

Für die obige Antwort sei vorsichtig mit Androidunten N!

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

Verweis auf Java 8API, der führt zu:

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

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

ist ein KotlinMerkmal

Ken Zira
quelle
Ja, ich habe auch einen halben Tag damit verschwendet. for ((key, val) ...) hat das Problem gelöst.
Andude
2

Ein anderer Weg, der nicht erwähnt wurde, ist:

val mapOfItems = hashMapOf(1 to "x", 2 to "y", -1 to "zz")
mapOfItems.map { (key, value) -> println("$key = $value") }
Weiße Katze
quelle