我需要將Iterable [Throwable,String]減少到[Throwable,Iterable [String]]。我不知道這個操作是否很常見,在Iterable特徵上沒有發現任何東西。所以我寫了這個功能:減少Iterable [要麼[A,B]]要麼[A,Iterable [B]]
def reduce[A, B](xs: Iterable[Either[A, B]]): Either[A, Iterable[B]] =
xs.collectFirst {
case Left(x) => x
} match {
case Some(x) => Left(x)
case None => Right(xs.collect{case Right(y)=> y})
}
誰能幫助我找到一個更好的方式,如果這一塊是不是?
要實現轉型是有點曖昧。你的輸入列表包含例如'Right [String]'的一半和各種不同'Left [Exception]'的一半。您希望將其減少爲一個例外或字符串列表。如果有例外,應該採取哪種例外在輸入中有十個不同點? –
你說得對。我想只考慮它會隱藏其他的第一個異常(或任何左值),但對我的用例來說是可以接受的。 –
這是http://stackoverflow.com/questions/7230999/how-to-reduce-a-seqeithera-b-to-a-eitherseqa-seqb的副本。 – ziggystar