Scala immutable Map a un membre mapValues
, qui permet d'effectuer le mappage sur des valeurs uniquement (pas les clés). Lorsque vous utilisez immutable ListMap à la place, ce membre est hérité, mais il n'est pas remplacé, donc il renvoie toujours un Map
, pas ListMap
.Remplacer mapValues pour ListMap
Existe-t-il un moyen simple de mettre en œuvre mapValues
pour un ListMap
?
Dans le fragment suivant, je veux que le type de retour d'être un ListMap
, non Map
:
import scala.collection.immutable.ListMap
val lm = ListMap(1 -> "1", 0 -> "0", 2 -> "2")
lm.mapValues (v => v+v)
Juste Pour votre information, cela arrive parce que 'mapValues', contrairement' map' et d'autres combinateurs génériques, retourne une vue * * à la carte existante et non à une nouvelle collection. Vous devez matérialiser cette vue, mais il semble n'y avoir aucun moyen plus facile que de réimplémenter 'mapValues' via' map' ou d'ajouter des valeurs à une nouvelle carte. –