我正在使用cats,想知道如何使用它来转换数据。
从…
val data = Either[Error, Option[Either[Error, Account]]]至
val target: Either[Error, Option[Account]] = howToConvert(data)如果发生任何Error,结果将是Left(error),并带有第一个出现的错误。
我现在可以这样做:
data match {
case Left(e) => Left(e)
case Right(Some(Right(y))) => Right(Some(y))
case Right(Some(Left(e))) => Left(e)
case Right(None) => Right(None)
}但我在找一些简单的方法
发布于 2018-01-15 16:53:01
要做到这一点,最简单的方法是对内部的Option执行sequence操作,这样您就可以获得一个Either[Error, Either[Error, Option[Account]]],然后将其展平。使用cat语法,这非常简单:
import cats.implicits._
val target: Either[Error, Option[Account]] =
data.flatMap(_.sequence)为了清楚起见,sequence将类型构造函数转换为“内向外”,这意味着内部的Option[Either[Error, Account]]被转换为Either[Error, Option[Account]]。
发布于 2018-01-15 13:47:58
这里有一个“简单”的方法,它只假定偏向右的(Scala2.12)或cat的语法
val target: Either[Error, Option[Account]] =
data.flatMap(_.map(_.map(Some(_))).getOrElse(Right(None)))https://stackoverflow.com/questions/48257004
复制相似问题