Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hashmap kotlin中转换地图的惯用方法?_Hashmap_Kotlin - Fatal编程技术网

Hashmap kotlin中转换地图的惯用方法?

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

在Scala中,它只是
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