如何使用 scalaz.MonadPlus.separate 将 Eithers 列表转换为 Either of Lists
How to turn a List of Eithers to a Either of Lists using scalaz.MonadPlus.separate
如何使用 MonadPlus.separate
将 Eithers
的 List
转换为 Lists
的 Either
?
作者在 this answer 中声明了此解决方案,但未能提供导入或完整示例:
If scalaz is one of your dependencies I would simply use separate:
val el : List[Either[Int, String]] = List(Left(1), Right("Success"), Left(42))
scala> val (lefts, rights) = el.separate
lefts: List[Int] = List(1, 42)
rights: List[String] = List(Success)
这是一个真正可行的解决方案吗?
我看到 MonadPlus
有一个 separate
功能,但我还是没能让它发挥作用。
ps:我知道我可以在没有 scalaz 的情况下实现这一点,例如下面的示例。但是,在这个问题中,我问的是如何使用 scalaz.MonadPlus.separate
来实现这一点。
(lefts, rights) = (el.collect { case Left(left) => left }, el.collect { case Right(right) => right })
该解决方案是正确的,您只是在这里缺少 import scalaz.Scalaz._
。
如何使用 MonadPlus.separate
将 Eithers
的 List
转换为 Lists
的 Either
?
作者在 this answer 中声明了此解决方案,但未能提供导入或完整示例:
If scalaz is one of your dependencies I would simply use separate:
val el : List[Either[Int, String]] = List(Left(1), Right("Success"), Left(42)) scala> val (lefts, rights) = el.separate lefts: List[Int] = List(1, 42) rights: List[String] = List(Success)
这是一个真正可行的解决方案吗?
我看到 MonadPlus
有一个 separate
功能,但我还是没能让它发挥作用。
ps:我知道我可以在没有 scalaz 的情况下实现这一点,例如下面的示例。但是,在这个问题中,我问的是如何使用 scalaz.MonadPlus.separate
来实现这一点。
(lefts, rights) = (el.collect { case Left(left) => left }, el.collect { case Right(right) => right })
该解决方案是正确的,您只是在这里缺少 import scalaz.Scalaz._
。