2015-07-13 21 views
0

這是一個非常簡單的Scala代碼,但我想知道是否有任何方法來改進它。如何改進`list.map {case 3 => 6;情況我=>我}`?

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

list.map { 
    case 3 => 6 
    case i => i 
} 

我只想項目3轉換,以防止他人,因爲他們是什麼。該代碼現在很簡單,但我仍然覺得case i => i部分不是那麼必要。

有什麼辦法可以改善它,所以我可以只提供核心邏輯case 3 => 6


我能想到的解決方法是定義諸如自定義函數:

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

然後:

change(list)({ case 3 => 6}) 

但我不知道是否有一些已經做到了這一點。

+0

像這樣的事情? 'list.map(x => if(x == 3)6 else x)' – jwvh

回答

2

不是特別驚人:

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] 
相關問題