En Scala, c'est juste la fonction map
. Par exemple, si hashMap est une hashMap de chaînes, vous pouvez effectuer les opérations suivantes:
val result : HashMap[String,String] = hashMap.map(case(k,v) => (k -> v.toUpperCase))
En Kotlin, cependant, map
transforme la carte en liste. Existe-t-il une manière idiomatique de faire la même chose à Kotlin?
Je ne pense pas que l'opinion d'une personne compte comme idiomatique, mais j'utiliserais probablement
// 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() }
J'ai trouvé une autre variante. Il semble être plus clair
val result = mapOf( *hashMap.map { it.key.toUpperCase() to it.value.toUpperCase() }.toTypedArray() )
Cela déduira automatiquement le type de carte obtenue.
.toTypedArray()
est requis pour utiliser splat(*)
opérateur.
Vous pouvez utiliser la fonction stdlib mapValues
que d'autres ont suggérée:
hashMap.mapValues { it.value.toUpperCase() }
Je crois que c'est la manière la plus idiomatique.