web-dev-qa-db-ja.com

List [Option]からNoneをフィルタリングする方法は?

ScalaにList[Option[A]]がある場合、None値を除外する慣用的な方法は何ですか?

1つの方法は、次を使用することです。

val someList: List[Option[String]] = List(Some("Hello"), None, Some("Goodbye"))
someList.filter(_ != None)

もっと「イディオマティック」な方法はありますか?これは非常に簡単に思えます。

96
Ralph

オプションを同時に削除したい場合は、flattenを使用できます。

scala> someList.flatten
res0: List[String] = List(Hello, Goodbye)
152
Nicolas

someList.filter(_.isDefined)結果タイプをList[Option[A]]として保持する場合

16
Kevin O'Riordan

catsライブラリにはflattenOptionもあり、これによりF[Option[A]]F[A](ここでF[_]FunctorFilterです)

import cats.implicits._

List(Some(1), Some(2), None).flattenOption == List(1, 2)
2
dcastro