Skip to content

フィルタリング(Filtering)オペレーター

概要

フィルタリングオペレーターは、ソースシーケンスから特定の要素を選択的に通過させたり、除外したりするオペレーター群です。条件に基づく絞り込み、重複排除、要素数や時間による切り出しなど、多様なフィルタリング手法を提供します。

オペレーター一覧

条件フィルタリング

オペレーター説明
Where条件に一致する要素のみを通過させる
WhereAwait非同期条件で要素をフィルタリングする
WhereNotNullnull でない要素のみを通過させる

重複排除

オペレーター説明
Distinctシーケンス全体で重複を排除する
DistinctByキーに基づいてシーケンス全体で重複を排除する
DistinctUntilChanged連続する重複のみを排除する
DistinctUntilChangedByキーに基づいて連続する重複のみを排除する

先頭からの切り出し(Take 系)

オペレーター説明
Take先頭から指定個数または指定時間の要素を取得する
TakeLast末尾から指定個数または指定時間の要素を取得する
TakeUntil外部シグナルや条件が満たされるまで要素を取得する
TakeWhile条件が真の間、要素を取得する

先頭からの除外(Skip 系)

オペレーター説明
Skip先頭から指定個数または指定時間の要素をスキップする
SkipLast末尾から指定個数または指定時間の要素をスキップする
SkipUntil外部シグナルや条件が満たされるまで要素をスキップする
SkipWhile条件が真の間、要素をスキップする

その他

オペレーター説明
IgnoreElementsすべての要素を無視し、完了・エラーのみ通知する

比較表

Take 系 vs Skip 系

Take 系と Skip 系は対称的な関係にあります。Take 系は条件に合致する部分を残し、Skip 系は条件に合致する部分を除外します。

動作残す(Take)除外する(Skip)
個数・時間で指定TakeSkip
末尾から個数・時間で指定TakeLastSkipLast
外部シグナルまでTakeUntilSkipUntil
条件が真の間TakeWhileSkipWhile

Distinct 系の使い分け

オペレーター重複排除の範囲キー指定
Distinctシーケンス全体要素そのもの
DistinctByシーケンス全体キーセレクター
DistinctUntilChanged連続する要素のみ要素そのもの
DistinctUntilChangedBy連続する要素のみキーセレクター

Where 系の使い分け

オペレーター用途
Where同期的な条件でフィルタリング
WhereAwait非同期条件でフィルタリング(API 呼び出し等)
WhereNotNullnull 排除に特化(型も非 null 型に変換)

使い分けガイド

「条件に合う要素だけ欲しい」→ Where

最も基本的なフィルタリング。LINQ の Where と同じ感覚で使えます。

「null を除外したい」→ WhereNotNull

Where(x => x != null) より型安全です。戻り値の型が非 null 型(Observable<T>Observable<T> where T is non-null)になります。

「同じ値が連続するときにスキップしたい」→ DistinctUntilChanged

UI のプロパティ変更通知など、値が実際に変化したときだけ処理したい場合に使います。

「最初の N 個だけ欲しい」→ Take

先頭から必要な数だけ取得し、自動的に完了します。

「完了だけ知りたい」→ IgnoreElements

すべての要素を無視し、OnCompleted / OnErrorR のみを受け取ります。