Si vous devez faire beaucoup, vous pourriez écrire une fonction utilitaire:
def replace[T](x: T, y: T) = (i: T) => if (i == x) y else i
Ceci vous permettrait d'écrire
list map replace(x, y)
Ou, pour la syntaxe infixe:
class ReplaceWith[T](x: T) {
def replaceWith(y: T) = (i: T) => if (i == x) y else i
}
object ReplaceWith {
implicit def any2replaceWith[T](x: T) = new ReplaceWith(x)
}
// now you can write
list map (x replaceWith y)
Une autre solution consiste à utiliser une carte:
list map Map(x -> y).withDefault(identity)
Avec une fonction utilitaire:
scala> def replace[T](pairs: (T, T)*) = Map(pairs: _*).withDefault(identity)
replace: [T](pairs: (T, T)*)scala.collection.immutable.Map[T,T]
scala> List(1,2,3) map replace(1 -> -1, 3 -> 4)
res0: List[Int] = List(-1, 2, 4)
Notez que vous pouvez tout mettre sur une ligne 'liste m ap {case \ 'x \' => y cas a => a} ' – huynhjl
dans cet exemple, il est beaucoup mieux dans deux lignes –