¿Cómo iterar sobre hashmap en Kotlin?


Respuestas:


205

No es tan dificil:

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

O
( actualizado de acuerdo con la información de @ RuckusT-Boom y @ KenZira ).

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

38
Vale la pena señalar que la segunda versión puede causar problemas en Android, por lo que es posible que desee utilizarmap.forEach { (key, value) -> println("$key = $value") }
Ruckus T-Boom

1
@ RuckusT-Boom ¿de qué manera causa problemas?
Anigif

7
Android no tiene (o no tenía en el momento de ese comentario) soporte completo para Java 8, y el segundo ejemplo es una llamada a Java 8. La llamada equivalente que usa la desestructuración de Kotlin es muy similar, pero necesita corchetes alrededor de los argumentos { (key, value) -> ... }. Ken Zira tiene más información en su respuesta.
Ruckus T-Boom

1
Descubrimos por las malas que la forma de @ RuckusT-Boom es mejor en Android :) (Debido a una ClassNotFoundException, nos cuesta mucho entender)
Micha

1
La respuesta de @ RuckusT-Boom es la correcta, tuvimos este problema durante las pruebas de lanzamiento en diferentes niveles de API, y no estaba muy claro por qué fallaba, el mensaje de error también es engañoso
Alaa Eddine Cherbib

64

Para la respuesta anterior, ¡tenga cuidado con la Androidsiguiente N!

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

referencia a Java 8api que conduce a:

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

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

es Kotlincaracterística


Sí, también desperdicié medio día en esto. for ((key, val) ...) resolvió el problema.
andude

2

Otra forma que no se ha mencionado es:

val mapOfItems = hashMapOf(1 to "x", 2 to "y", -1 to "zz")
mapOfItems.map { (key, value) -> println("$key = $value") }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.