Jak iterować po hashmap w Kotlinie?


Odpowiedzi:


205

To nie jest takie trudne:

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

LUB
( Aktualizowane zgodnie z informacjami @ RuckusT-Boom i @ KenZira ).

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

38
Warto zauważyć, że druga wersja może powodować problemy na Androidzie, więc możesz chcieć użyćmap.forEach { (key, value) -> println("$key = $value") }
Ruckus T-Boom

1
@ RuckusT-Boom, w jaki sposób powoduje problemy?
Anigif

7
Android nie ma (lub nie miał w czasie tego komentarza) pełnego wsparcia dla języka Java 8, a drugim przykładem jest wywołanie Java 8. Równoważne wywołanie za pomocą destrukturyzacji Kotlina wygląda bardzo podobnie, ale potrzebujesz nawiasów wokół argumentów { (key, value) -> ... }. Ken Zira ma więcej informacji w swojej odpowiedzi.
Ruckus T-Boom

1
Dowiedzieliśmy się na własnej skórze, że droga @ RuckusT-Boom jest lepsza na Androidzie :) (Ze względu na wyjątek ClassNotFoundException ciężko nam się dowiedzieć)
Micha

1
Odpowiedź @ RuckusT-Boom jest prawidłowa, mieliśmy ten problem podczas testów wydania na różnych poziomach API i nie było do końca jasne, dlaczego się
zawiesił

64

W przypadku powyższej odpowiedzi uważaj na Androidponiższe N!

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

odniesienie do Java 8API, które prowadzi do:

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

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

jest Kotlincechą


Tak, ja też zmarnowałem na to pół dnia. for ((key, val) ...) rozwiązało problem.
andude

2

Innym sposobem, o którym nie wspomniano, jest:

val mapOfItems = hashMapOf(1 to "x", 2 to "y", -1 to "zz")
mapOfItems.map { (key, value) -> println("$key = $value") }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.