値を持つ のすべてのエントリを取得することは可能List[Option[T]]
ですか?
例:
val list = List(None, Some(1), None, Some(2))
list.filter(_.isDefined).map(_.get)
結果:
List[Int] = List(1, 2)
ワンステップでそれを行う方法はありますか?よくあるケースですね。
値を持つ のすべてのエントリを取得することは可能List[Option[T]]
ですか?
例:
val list = List(None, Some(1), None, Some(2))
list.filter(_.isDefined).map(_.get)
結果:
List[Int] = List(1, 2)
ワンステップでそれを行う方法はありますか?よくあるケースですね。
ご了承ください
list.flatten
同様に行います。
はい、そのために使用できますcollect
:
list.collect { case Some(x) => x }
collect
は を取り、PartialFunction[A,B]
この関数が定義されているすべての要素にこの関数を適用し、残りを破棄します。
編集:
gpampara が正しく述べたように、この場合flatten
は十分です。collect
追加の制約や変換がある場合は、適切なツールになります。
以下も使用できます。
list.flatMap( x => x)
scala> val a = List(None, Some(1), None, Some(2))
a: List[Option[Int]] = List(None, Some(1), None, Some(2))
scala> a.flatMap(x => x)
res0: List[Int] = List(1, 2)
これがどのように/なぜ機能するかの説明については、次の記事をご覧ください。