Hashmap kotlin中转换地图的惯用方法?
在Scala中,它只是Hashmap kotlin中转换地图的惯用方法?,hashmap,kotlin,Hashmap,Kotlin,在Scala中,它只是map函数。例如,如果hashMap是字符串的hashMap,则可以执行以下操作: val result : HashMap[String,String] = hashMap.map(case(k,v) => (k -> v.toUpperCase)) 然而,在Kotlin中,map将映射转换为列表。在科特林,有没有一种惯用的方式来做同样的事情?我不认为一个人的意见是惯用的,但我可能会使用 // transform keys only (use same va
map
函数。例如,如果hashMap是字符串的hashMap,则可以执行以下操作:
val result : HashMap[String,String] = hashMap.map(case(k,v) => (k -> v.toUpperCase))
然而,在Kotlin中,
map
将映射转换为列表。在科特林,有没有一种惯用的方式来做同样的事情?我不认为一个人的意见是惯用的,但我可能会使用
// 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() }
您可以使用其他人建议的方法:
hashMap.mapValues { it.value.toUpperCase() }
我相信这是最惯用的方式。我发现了另一种变体。这似乎更清楚
val result = mapOf( *hashMap.map { it.key.toUpperCase() to it.value.toUpperCase() }.toTypedArray() )
它将自动推断出结果映射的类型
.toTypedArray()
必须使用splat(*)
运算符。该函数似乎是为此而设计的:
hashMap.map { (key, value) ->
key.toLowerCase() to value.toUpperCase()
}.toMap()
它将
Iterable
转换为Map
,mapKeys
,mapValues
或将groupBy
应用于简单Map
?@yeputons的结果。我不知道。你告诉我这是不是惯用语。请随意添加答案您应该接受来自@James bassett的答案这也是我会做的,尽管如果您只转换值,那么您可以使用mapValues
(例如hashMap.mapValues{it.value.toUpperCase()}
)但是我个人不喜欢mapValues
的签名,因为它使用transform:(Map.Entry)->R
而不是transform:(V)->R
,这在我看来与filterValues(谓词:(V)->Boolean)
不一致,这意味着无法编写hashMap.mapValues(String::toUpperCase)
所以我只使用了hashMap.entries.associate{…}
。更新后也包括了mapValues()
,谢谢@mfulton26最后一行很漂亮。感谢您提供的这个示例,Kotlin确实很棒。这里是一个不必要的转换toMap
,以获得更好的性能和更少的代码使用方法,来自@James Bassett