从一系列Eithers投射一系列'左派'?

时间:2014-05-26 08:55:26

标签: scala seq either

(警告 - 我是一个scala noob)给定一系列Eithers,即

theResults : Seq[Either[Error, String]]

我试图通过使用left(s)

上的地图来提取所有错误
theResults match {
  case r if r.exists(_.isLeft)  => {
    val errors = theResults.map(r => r.left)
    ...
  }

然而,这会返回

Seq[Either.LeftProjection[ErrorResponse, String]]

而不是我希望的Seq[ErrorResponse]

请把我从痛苦中解救出来?

2 个答案:

答案 0 :(得分:1)

最简单的选择可能是:

val lefts = theResults.map(_.left.toOption).flatten

将返回Error的序列(或任何左类型)。

就我个人而言,我认为scalaz Either可以更好地使用,因为它有正确的偏见......

答案 1 :(得分:-1)

这个怎么样?

val lefts = theResults.filter(_.isLeft).map(_.asInstanceOf[Left].a)