在kotlin中转换地图的惯用法?

时间:2017-02-07 04:08:36

标签: hashmap kotlin

在Scala中,它只是map函数。例如,如果hashMap是字符串的hashMap,那么您可以执行以下操作:

val result : HashMap[String,String] = hashMap.map(case(k,v) => (k -> v.toUpperCase))

然而,在Kotlin中,map将地图变成了一个列表。在Kotlin有同样的方式做同样的事吗?

4 个答案:

答案 0 :(得分:44)

我不认为一个人的意见是惯用的,但我可能会使用

// transform keys only (use same values)
hashMap.mapKeys { it.key.toUpperCase() }

// transform values only (use same key) - what you're after!
hashMap.mapValues { it.value.toUpperCase() }

// transform keys + values
hashMap.entries.associate { it.key.toUpperCase() to it.value.toUpperCase() }

答案 1 :(得分:1)

我发现了另一种变体。似乎更清楚

val result = mapOf( *hashMap.map { it.key.toUpperCase() to it.value.toUpperCase() }.toTypedArray() ) 

它会自动推断出结果地图的类型。

.toTypedArray()需要使用splat(*)运算符。

答案 2 :(得分:1)

toMap函数似乎是为此设计的:

hashMap.map { (key, value) ->
      key.toLowerCase() to value.toUpperCase()
    }.toMap()

它将Iterable<Pair<K, V>>转换为Map<K, V>

答案 3 :(得分:0)

您可以使用其他人建议的stdlib mapValues function

hashMap.mapValues { it.value.toUpperCase() }

我认为这是最惯用的方式。