【发布时间】:2011-06-27 07:01:22
【问题描述】:
我有一些类似下面的代码,其中我有一个列表,我想把它变成列表中的一个...特别是(在这种情况下),如果列表中有任何左,然后我返回它们列表的左,否则我返回权利列表的右。
val maybe: List[Either[String, Int]] = getMaybe
val (strings, ints) = maybe.partition(_.isLeft)
strings.map(_.left.get) match {
case Nil => Right(ints.map(_.right.get))
case stringList => Left(stringList)
}
打电话给get 总是让我觉得我一定错过了什么。
有没有更惯用的方法来做到这一点?
【问题讨论】:
-
我发现所描述的问题有点奇怪。 Strings 对 Ints 的偏好似乎有点不对称。如何编写类似 unzipEither 的东西,它返回一个字符串列表和一个整数列表。这样,该方法就不会丢失信息,而您的版本在混合列表的情况下会这样做。
-
听起来你最好使用像Scalaz Validation这样的结构。