How to split a List[Either[A, B]]

前端 未结 8 1164
南笙
南笙 2020-12-10 11:01

I want to split a List[Either[A, B]] in two lists.

Is there a better way ?

def lefts[A, B](eithers : List[Either[A, B]]) : List[A] = eit         


        
8条回答
  •  北荒
    北荒 (楼主)
    2020-12-10 11:41

    Not sure this is really much neater, but :

    scala> def splitEitherList[A,B](el: List[Either[A,B]]) = {
             val (lefts, rights) = el.partition(_.isLeft)
             (lefts.map(_.left.get), rights.map(_.right.get))
           }
    splitEitherList: [A, B](el: List[Either[A,B]])(List[A], List[B])
    
    scala> val el : List[Either[Int, String]] = List(Left(1), Right("Success"), Left(42))
    el: List[Either[Int,String]] = List(Left(1), Right(Success), Left(42))
    
    scala> val (leftValues, rightValues) = splitEitherList(el)
    leftValues: List[Int] = List(1, 42)
    rightValues: List[String] = List("Success")
    

提交回复
热议问题