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") }
Aleksandra Romanowa
źródło
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ą

Ken Zira
źródło
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") }
Biały kot
źródło