在Scala中过滤Failure(t)实例的惯用方法

时间:2015-01-12 08:07:44

标签: scala exception-handling monads scala-2.11

如果我在Scala中有List[Try[A]],过滤掉Failure(t)值的惯用方法是什么?

一种方法是使用以下内容:

val someList: List[Try[String]] = ...
someList.filter(_.isFailure)

是否有更“惯用”的方式,例如使用flatten?这看起来很简单。

1 个答案:

答案 0 :(得分:8)

如果您想获得所有例外,可以使用collect,如下所示:

someList.collect{ case Failure(t) => t }
// List[Throwable]

如果您想获得所有成功结果,可以使用flatMapcollect

someList.flatMap{ _.toOption }
// List[String]

someList.collect{ case Success(s) => s }