三項演算子?と呼ばれることもある演算子は、Scala では必要ありませんif-else。
val x = if (condition) 1 else 2
これを で使用するには、 のどちらかの側で を使用して返すmapことができます。は暗黙的に に変換可能であるため、結果としてリストが平坦化され、フィルタが適用されます。flatMapOptionif-elseOptionIterableNones
val statuses = tweets.flatMap(status => if (status.isTruncate) None else Some(status.getText))
mapこれは、次にを使用することと同等ですflatten。
val statuses = tweets.map(status => if (status.isTruncate) None else Some(status.getText)).flatten
より慣用的には、を使用できますcollect。これにより、部分関数を使用してワンステップでfilter実行できます。map
val statuses = tweets.collect {
case status if !status.isTruncate => status.getText
}
filterとを使用して 2 つの手順でこれを行うこともできますmap。
val statuses = tweets.filterNot(_.isTruncate).map(_.getText)
ここでの欠点は、これがリストを 2 回反復することであり、これは望ましくない場合があります。を使用する場合view、この同じロジックを使用して、リストを 1 回だけ反復できます。
val statuses = tweets.view.filterNot(_.isTruncate).map(_.getText)