在Scala中,它只是map
函数。例如,如果hashMap是字符串的hashMap,那么您可以执行以下操作:
val result : HashMap[String,String] = hashMap.map(case(k,v) => (k -> v.toUpperCase))
然而,在Kotlin中,map
将地图变成了一个列表。在Kotlin有同样的方式做同样的事吗?
答案 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)