2015-04-22 79 views

回答

4

另一個選擇,如果你不關心失敗是flatMapTry使用toOption登錄任何東西。像這樣:

val successValues = tryValues.flatMap(_.toOption) 
+0

我覺得你更優雅,也可以用在火花RDD上。 – Renkai

+1

@Renkai你可以用同樣的方法使用'collect'與'RDD'。它也清楚表明你正在收集成功。 –

6

你想使用collect模式匹配所有的值是Success,並放棄其他任何東西。

val successValues: List[Int] = tryValues collect { case Success(x) => x } 

collect接受PartialFunction作爲參數。將定義PartialFunction的集合中的任何值都將被映射,其餘的將被丟棄。

例子:

scala> val tryValues = List(1, 1, 0, 1, 1).map(x => Try(1/x)) 
tryValues: List[scala.util.Try[Int]] = List(Success(1), Success(1), Failure(java.lang.ArithmeticException:/by zero), Success(1), Success(1)) 

scala> val successValues = tryValues collect { case Success(x) => x } 
successValues: List[Int] = List(1, 1, 1, 1) 
相關問題