ScalaにList[Option[A]]
がある場合、None
値を除外する慣用的な方法は何ですか?
1つの方法は、次を使用することです。
val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye"))
someList.filter(_ != None)
もっと「イディオマティック」な方法はありますか?これは非常に簡単に思えます。
オプションを同時に削除したい場合は、flatten
を使用できます。
scala> someList.flatten
res0: List[String] = List(Hello, Goodbye)
someList.filter(_.isDefined)
結果タイプをList[Option[A]]
として保持する場合
cats
ライブラリにはflattenOption
もあり、これによりF[Option[A]]
をF[A]
(ここでF[_]
はFunctorFilter
です)
import cats.implicits._
List(Some(1), Some(2), None).flattenOption == List(1, 2)