20

値を持つ のすべてのエントリを取得することは可能List[Option[T]]ですか?

例:

val list = List(None, Some(1), None, Some(2))
list.filter(_.isDefined).map(_.get)

結果:

 List[Int] = List(1, 2)

ワンステップでそれを行う方法はありますか?よくあるケースですね。

4

3 に答える 3

44

ご了承ください

 list.flatten

同様に行います。

于 2013-01-17T09:24:43.453 に答える
10

はい、そのために使用できますcollect

list.collect { case Some(x) => x }

collectは を取り、PartialFunction[A,B]この関数が定義されているすべての要素にこの関数を適用し、残りを破棄します。

編集

gpampara が正しく述べたように、この場合flattenは十分です。collect追加の制約や変換がある場合は、適切なツールになります。

于 2013-01-17T09:01:39.777 に答える
4

以下も使用できます。

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)

これがどのように/なぜ機能するかの説明については、次の記事をご覧ください。

于 2013-01-17T09:13:16.913 に答える