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 のみを受け取ります。