2013-10-18 22 views
2

所以,我有一個簡單的集合,說:如何在Scala中鏈接生成帶濾波器的元組的地圖?

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

我想把它映射到一個元組列表,然後篩選了這一點,再後來映射了它的結果,所以這將是是這樣的:

a.map(x => (x, x * x)).filter(tup => tup._2 < 10).map(tup => tup._1 + tup._2) 

只是不使用tuptup._1,我想用變量的名字,如numbersquare,最好是在參數部分。

可能嗎?我怎樣才能做到這一點?

回答

9

考慮使用部分功能和收集功能:

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

scala> a.map(x => (x, x * x)) collect { 
    | case (number, square) if square < 10 => 
    |  number + square 
    | } 
res0: List[Int] = List(2, 6, 12) 

收集在這種情況下,就像地圖的組合和篩選

+0

酷的解決方案,謝謝! – elias