web-dev-qa-db-fra.com

Manière idiomatique de transformer la carte en kotlin?

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?

21
U Avalos

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() }
39
James Bassett

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.

0
Alexander Usikov

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.

0
Ruckus T-Boom