2016-02-09 10 views
5

Scalaを使用してコードを開発しています。Option[T]を含むコレクション間の基本的な変換をスマートに解決しようとしています。Scalaのオプション[T]をスマートに扱う

のは、我々は次のリスト

val list: List[(A, Option[B])] = // Initialization stuff 

を持っているし、我々は次のリストSome[B]に評価され、すべてのOption[B]のため

val transformed: List[(B, A)] 

に得ることがlistに変換を適用したいとしましょう。私が見つけた最良の方法は、次のような変換の連鎖を適用することです:

val transformed = 
    list.filter(_.isDefined) 
     .map { case (a, Some(b)) => (b, a) } 

しかし、私は何かが不足していると感じます。 Option[T]を処理する最善の方法はどれですか?

答えて

13

あなたはcollectを使用することができます。ドキュメントで定義されているよう

val transformed = list.collect { 
    case (a, Some(b)) => (b, a) 
} 

は、収集:

は、関数がある上、このリストのすべての要素に部分関数を適用することにより、新しいコレクションを作成します定義された。

意味すると、部分的な関数で定義されたいずれのケースにもマッチする要素に対してのみ結果が得られます。私はそれをfiltermapを組み合わせたものと考えています。

関連する問題