Bagaimana cara melakukan iterasi pada hashmap di Kotlin?

93

Cara iterate atas HashMap di Kotlin?

typealias HashMap<K, V> = HashMap<K, V> (source)
Nomi
sumber

Jawaban:

213

Tidak sesulit itu:

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

ATAU
( Diperbarui sesuai dengan informasi @ RuckusT-Boom dan @ KenZira .)

 map.forEach { (key, value) -> println("$key = $value") }
Alexander Romanov
sumber
38
Perlu dicatat bahwa versi kedua dapat menyebabkan masalah pada Android, jadi Anda mungkin ingin menggunakanmap.forEach { (key, value) -> println("$key = $value") }
Ruckus T-Boom
1
@ RuckusT-Boom dalam hal apa hal itu menyebabkan masalah?
Anigif
7
Android tidak (atau tidak pada saat komentar itu) memiliki dukungan penuh untuk Java 8, dan contoh kedua adalah panggilan Java 8. Panggilan setara yang menggunakan destructuring Kotlin terlihat sangat mirip, tetapi Anda membutuhkan tanda kurung di sekitar argumen { (key, value) -> ... }. Ken Zira memiliki lebih banyak info dalam jawabannya.
Ruckus T-Boom
1
Kami menemukan cara sulit bahwa cara @ RuckusT-Boom lebih baik di Android :) (Karena ClassNotFoundException kami kesulitan mencari tahu)
Micha
1
Jawaban @ RuckusT-Boom adalah benar, kami mengalami masalah ini selama uji rilis pada API Level yang berbeda, dan tidak begitu jelas mengapa itu mogok, pesan kesalahan juga menyesatkan
Alaa Eddine Cherbib
64

Untuk jawaban di atas, berhati-hatilah Android bawah ini N!

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

referensi ke Java 8api yang mengarah ke:

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

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

adalah Kotlinfitur

Ken Zira
sumber
Ya, saya juga menyia-nyiakan setengah hari untuk ini. untuk ((key, val) ...) memecahkan masalah.
andude
2

Cara lain yang belum disebutkan adalah:

val mapOfItems = hashMapOf(1 to "x", 2 to "y", -1 to "zz")
mapOfItems.map { (key, value) -> println("$key = $value") }
Kucing putih
sumber