Comment parcourir le hashmap à Kotlin?

Réponses:

205

Ce n'est pas si difficile:

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

OU
( Mis à jour conformément aux informations de @ RuckusT-Boom et @ KenZira .)

 map.forEach { (key, value) -> println("$key = $value") }
Alexandre Romanov
la source
38
Il convient de noter que la deuxième version peut causer des problèmes sur Android, vous voudrez peut-être utilisermap.forEach { (key, value) -> println("$key = $value") }
Ruckus T-Boom
1
@ RuckusT-Boom en quoi cela cause-t-il des problèmes?
Anigif
7
Android n'a pas (ou n'a pas au moment de ce commentaire) un support complet pour Java 8, et le deuxième exemple est un appel Java 8. L'appel équivalent utilisant la déstructuration de Kotlin semble très similaire, mais vous avez besoin de crochets autour des arguments { (key, value) -> ... }. Ken Zira a plus d'informations dans sa réponse.
Ruckus T-Boom
1
Nous avons découvert à la dure que la manière de @ RuckusT-Boom est meilleure sur Android :) (En raison d'une exception ClassNotFoundException, nous avons du mal à comprendre)
Micha
1
La réponse de @ RuckusT-Boom est la bonne, nous avons eu ce problème lors des tests de publication sur différents niveaux d'API, et il n'était pas très clair pourquoi il plantait, le message d'erreur est également trompeur
Alaa Eddine Cherbib
64

Pour la réponse ci-dessus, soyez prudent avec Androidci-dessous N!

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

référence à l' Java 8API qui conduit à:

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

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

est Kotlincaractéristique

Ken Zira
la source
Oui, j'ai perdu une demi-journée là-dessus aussi. for ((key, val) ...) a résolu le problème.
andude
2

Une autre façon qui n'a pas été mentionnée est:

val mapOfItems = hashMapOf(1 to "x", 2 to "y", -1 to "zz")
mapOfItems.map { (key, value) -> println("$key = $value") }
Chat blanc
la source