フィルタリング(Filtering)オペレーター
概要
フィルタリングオペレーターは、ソースシーケンスから特定の要素を選択的に通過させたり、除外したりするオペレーター群です。条件に基づく絞り込み、重複排除、要素数や時間による切り出しなど、多様なフィルタリング手法を提供します。
オペレーター一覧
条件フィルタリング
| オペレーター | 説明 |
|---|---|
| Where | 条件に一致する要素のみを通過させる |
| WhereAwait | 非同期条件で要素をフィルタリングする |
| WhereNotNull | null でない要素のみを通過させる |
重複排除
| オペレーター | 説明 |
|---|---|
| Distinct | シーケンス全体で重複を排除する |
| DistinctBy | キーに基づいてシーケンス全体で重複を排除する |
| DistinctUntilChanged | 連続する重複のみを排除する |
| DistinctUntilChangedBy | キーに基づいて連続する重複のみを排除する |
先頭からの切り出し(Take 系)
| オペレーター | 説明 |
|---|---|
| Take | 先頭から指定個数または指定時間の要素を取得する |
| TakeLast | 末尾から指定個数または指定時間の要素を取得する |
| TakeUntil | 外部シグナルや条件が満たされるまで要素を取得する |
| TakeWhile | 条件が真の間、要素を取得する |
先頭からの除外(Skip 系)
| オペレーター | 説明 |
|---|---|
| Skip | 先頭から指定個数または指定時間の要素をスキップする |
| SkipLast | 末尾から指定個数または指定時間の要素をスキップする |
| SkipUntil | 外部シグナルや条件が満たされるまで要素をスキップする |
| SkipWhile | 条件が真の間、要素をスキップする |
その他
| オペレーター | 説明 |
|---|---|
| IgnoreElements | すべての要素を無視し、完了・エラーのみ通知する |
比較表
Take 系 vs Skip 系
Take 系と Skip 系は対称的な関係にあります。Take 系は条件に合致する部分を残し、Skip 系は条件に合致する部分を除外します。
| 動作 | 残す(Take) | 除外する(Skip) |
|---|---|---|
| 個数・時間で指定 | Take | Skip |
| 末尾から個数・時間で指定 | TakeLast | SkipLast |
| 外部シグナルまで | TakeUntil | SkipUntil |
| 条件が真の間 | TakeWhile | SkipWhile |
Distinct 系の使い分け
| オペレーター | 重複排除の範囲 | キー指定 |
|---|---|---|
| Distinct | シーケンス全体 | 要素そのもの |
| DistinctBy | シーケンス全体 | キーセレクター |
| DistinctUntilChanged | 連続する要素のみ | 要素そのもの |
| DistinctUntilChangedBy | 連続する要素のみ | キーセレクター |
Where 系の使い分け
| オペレーター | 用途 |
|---|---|
| Where | 同期的な条件でフィルタリング |
| WhereAwait | 非同期条件でフィルタリング(API 呼び出し等) |
| WhereNotNull | null 排除に特化(型も非 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 のみを受け取ります。