相关疑难解决方法(0)

如何将Seq [A [B,B]]减少到[A,Seq [B]]

鉴于eithers的序列Seq[Either[String,A]]Left作为一个错误消息.我想获得一个Either[String,Seq[A]]在那里我得到了Right(这将是一个Seq[A]),如果序列的所有元素Right.如果至少有一个Left(错误消息),我想获取第一条错误消息或所有错误消息的串联.

当然你可以发布scalaz代码,但我也对不使用它的代码感兴趣.

编辑

我改变了标题,最初要求Either[Seq[A],Seq[B]]反映信息的正文.

functional-programming scala scalaz

48
推荐指数
5
解决办法
8293
查看次数

将List [Either [A,B]]转换为Either [List [A],List [B]]

如何转换List[Either[String, Int]]Either[List[String], List[Int]]使用类似于cats sequence的方法?例如, xs.sequence在以下代码中

import cats.implicits._
val xs: List[Either[String, Int]] = List(Left("error1"), Left("error2"))
xs.sequence
Run Code Online (Sandbox Code Playgroud)

返回,Left(error1)而不是required Left(List(error1, error2))

凯文·赖特的答案表明

val lefts = xs collect {case Left(x) => x }
def rights = xs collect {case Right(x) => x}
if(lefts.isEmpty) Right(rights) else Left(lefts)
Run Code Online (Sandbox Code Playgroud)

哪个返回Left(List(error1, error2)),但是猫是否提供开箱即用的排序方式来收集所有剩余数据?

scala scala-cats

7
推荐指数
1
解决办法
227
查看次数