我需要对地图中的所有值进行哈希处理并返回相同类型的地图。
此刻,我的解决方案看起来很奇怪:
val hashedPolicies = policyProperties.map { it.key to it.value.hash() }.toMap()
如果没有toMap()
,它将返回List
,这是不可接受的。
是否有更好的方法来创建像这样的地图新地图(无需使用.toMap()
)?
答案 0 :(得分:7)
尝试mapValues
:
inline fun <K, V, R> Map<out K, V>.mapValues( transform: (Entry<K, V>) -> R ): Map<K, R>
返回新地图,其条目具有该地图的键以及通过将变换函数应用于此地图中的每个条目而获得的值。
返回的地图保留了原始地图的输入迭代顺序。
kotlin-stdlib / kotlin.collections / mapValues
val test = mapOf("foo" to "bar")
println(test)
// {foo=bar}
val result = test.mapValues { it.value.hashCode() }
println(result)
// {foo=97299}
答案 1 :(得分:0)
使用fold一次完成所有操作:
val hashedPolicies = policyProperties.entries.fold(mutableMapOf<KeyType, Int>{ map, it ->
map.put(it.key, it.value.hashCode())
map
}
虽然mapValues
更具体并且适合于这种特定情况,但是fold
的级别较低的方法具有可用于所有iterable和数组类型的优点。此外,它还允许您使用任意返回类型。