題名の通り。Option のリストから None を除外したい。
以下、3パターン (worse
, better
, best
) 等価だが、当然 worse
より best
の方が良い。
val raw: List[Option[A]] = List(Some(a), None, Some(b), Some(c), None)
val worse: List[A] = {
def splitOption(list: List[Option[A]]): List[A] = {
list match {
case Nil => Nil
case Some(head) :: tail => head :: splitOption(tail)
case None :: tail => splitOption(tail)
}
}
splitOption(raw)
}
val better: List[A] = raw.flatMap(a => a)
val best: List[A] = raw.flatten