如何在Kotlin中迭代hashmap?

Nom*_*omi 56 kotlin kotlin-extension

如何循环的HashMapKotlin

typealias HashMap<K, V> = HashMap<K, V> (source)
Run Code Online (Sandbox Code Playgroud)

Ale*_*nov 137

这并不困难:

for ((key, value) in map) {
    println("$key = $value")
}
Run Code Online (Sandbox Code Playgroud)

要么

 map.forEach { (key, value) -> println("$key = $value") }
Run Code Online (Sandbox Code Playgroud)

更新按照@ RuckusT-BOOM的@ KenZira的信息.

  • 值得注意的是,第二个版本可能会导致Android问题,所以你可能想要使用`map.forEach {(key,value) - > println("$ key = $ value")}` (31认同)
  • Android没有(或者在评论时没有)完全支持Java 8,第二个例子是Java 8调用.使用Kotlin解构的等效调用看起来非常相似,但你需要围绕参数`{(key,value) - > ...}`的括号.Ken Zira在他的回答中有更多信息. (6认同)
  • @RuckusT-Boom 的答案是正确的,我们在不同 API 级别的发布测试期间遇到了这个问题,并且不太清楚它崩溃的原因,错误消息也具有误导性 (2认同)

Ken*_*ira 45

对于上述答案,请注意Android以下内容N!

map.forEach { key, value -> println("$key = $value") }
Run Code Online (Sandbox Code Playgroud)

参考Java 8api导致:

Rejecting re-init on previously-failed class java.lang.Class<T>
Run Code Online (Sandbox Code Playgroud)
map.forEach { (key, value) -> println("$key = $value") }
Run Code Online (Sandbox Code Playgroud)

Kotlin功能

  • 是的,我也浪费了半天时间。for ((key, val) ...) 解决了这个问题。 (2认同)

Sib*_*med 9

使用“for 循环”或“forEach”或“迭代器”

 fun main(args : Array<String>) {
    val items = HashMap<String, String>()
    items["1"] = "USA"
    items["2"] = "Japan"
    items["3"] = "India"

    //for loop example
    println("\n-- Example 1.1 -- ");
    for ((k, v) in items) {
        println("$k = $v")
    }
    // forEach example
    println("\n-- Example 1.2 --");
    items.forEach { (k, v) ->
        println("$k = $v")
    }

    //Iterator example
    println("\n-- Example 1.3 --");
    val itr = items.keys.iterator()
    while (itr.hasNext()) {
        val key = itr.next()
        val value = items[key]
        println("${key}=$value")
    }

}
Run Code Online (Sandbox Code Playgroud)


Whi*_*cat 7

另一种没有提到的方法是:

val mapOfItems = hashMapOf(1 to "x", 2 to "y", -1 to "zz")
mapOfItems.map { (key, value) -> println("$key = $value") }
Run Code Online (Sandbox Code Playgroud)