Scala 如何改进'list.map{case 3=>;6;case i=>;i}'?

Scala 如何改进'list.map{case 3=>;6;case i=>;i}'?,scala,Scala,这是一个非常简单的Scala代码,但我想知道是否有任何方法可以改进它 val list = List(1, 2, 3, 4) list.map { case 3 => 6 case i => i } 我只想转换项目3,并保持其他项目不变。代码现在非常简单,但我仍然觉得案例I=>I部分没有那么必要 有没有办法改进它,这样我就可以提供核心逻辑案例3=>6 我能想到的解决方案是定义一个自定义函数,如: def change(list: List[Int])(f: Partia

这是一个非常简单的Scala代码,但我想知道是否有任何方法可以改进它

val list = List(1, 2, 3, 4)

list.map {
  case 3 => 6
  case i => i
}
我只想转换项目
3
,并保持其他项目不变。代码现在非常简单,但我仍然觉得
案例I=>I
部分没有那么必要

有没有办法改进它,这样我就可以提供核心逻辑
案例3=>6


我能想到的解决方案是定义一个自定义函数,如:

def change(list: List[Int])(f: PartialFunction[Int, Int]): List[Int] = {
    list.map { item =>
        if (f.isDefinedAt(item)) f(item) else item
    }
}
然后:


但我想知道是否有什么东西已经做到了这一点。

并不特别令人惊讶:

scala> val list = List(1, 2, 3, 4)
list: List[Int] = List(1, 2, 3, 4)

scala> val pf: PartialFunction[Int, Int] = { case 3 => 6 }
pf: PartialFunction[Int,Int] = <function1>

scala> list.map(pf.applyOrElse(_, identity[Int]))
res3: List[Int] = List(1, 2, 6, 4)


像这样的
list.map(x=>if(x==3)6 else x)
scala> val list = List(1, 2, 3, 4)
list: List[Int] = List(1, 2, 3, 4)

scala> val pf: PartialFunction[Int, Int] = { case 3 => 6 }
pf: PartialFunction[Int,Int] = <function1>

scala> list.map(pf.applyOrElse(_, identity[Int]))
res3: List[Int] = List(1, 2, 6, 4)
scala> def f(vs: List[Int])(pf: PartialFunction[Int, Int]) = vs map (pf.applyOrElse(_, identity[Int]))
f: (vs: List[Int])(pf: PartialFunction[Int,Int])List[Int]

scala> f(list) { case 3 => 6 }
res4: List[Int] = List(1, 2, 6, 4)
scala> def f(vs: List[Int])(pf: PartialFunction[Int, Int]) = vs map (pf orElse { case x => x })
f: (vs: List[Int])(pf: PartialFunction[Int,Int])List[Int]