三項演算子?
と呼ばれることもある演算子は、Scala では必要ありませんif-else
。
val x = if (condition) 1 else 2
これを で使用するには、 のどちらかの側で を使用して返すmap
ことができます。は暗黙的に に変換可能であるため、結果としてリストが平坦化され、フィルタが適用されます。flatMap
Option
if-else
Option
Iterable
Nones
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)