Wie iteriere ich über Hashmap in Kotlin?


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") }

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


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") }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.