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

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


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") }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.