Scala 如何改进'list.map{case 3=>;6;case i=>;i}'?
这是一个非常简单的Scala代码,但我想知道是否有任何方法可以改进它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
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]