このチュートリアルは、RxJava1 に基づいた包括的な説明です。データのさらなるフィルタリングが必要になる場合があります。次のチュートリアルでは、ほとんどのフィルタリング操作の関数について説明します。
Distinct - 送信された重複データを削除します
- Filter - 条件に基づいて特定のデータをフィルタリングします
- First - 送信キューの最初のデータを取得します
- Last - 送信キューの最後のデータを取得しますデータの一部
- ElementAt - インデックスに基づいてキュー内の特定のデータを送信します
- Take - キュー内のデータの最初の n 項目を取得します
- TakeLast - データの最後の n 項目を取得しますキュー
- Sample - 送信時間に従ってサンプリングして送信します
- IgnoreElements - 送信データキューを無視します
- 1.Distinct
-
これでクラスがあり、生徒の情報が入力されました学生制度。同じデータが繰り返されていることが判明しました。生徒のデータ キューは次のとおりです:
private ArrayList<Student> initPersons() { ArrayList<Student> persons = new ArrayList<>(); persons.add(new Student("张三", 16)); persons.add(new Student("李四", 17)); persons.add(new Student("王二麻子", 18)); persons.add(new Student("张三", 22)); return persons; }
現在の必要性は、重複した名前を持つオブジェクトをインターセプトすることです。そして、それを出力します:
Observable .from(initPersons()) //过滤重复名字的项 .distinct(new Func1<Student, String>() { @Override public String call(Student student) { return student.name; } }) .subscribe(new Action1<Student>() { @Override public void call(Student student) { Log.i(TAG, "call: "+student); } });
出力は次のとおりです:
IT520: call: Student{name='张三', age=16} IT520: call: Student{name='李四', age=17} IT520: call: Student{name='王二麻子', age=18}
2.Filter
渡されたデータの繰り返し部分をフィルタリングすることに加えて、フィルタを使用してルールに従って特定のデータをクリアすることもできます。
次のコードで送信されるデータは 12345 です。フィルタリング ルールは、データ バーが 4 未満である必要があるということです。サンプル コードは次のとおりです:
Observable.just(1, 2, 3, 4, 5) .filter(new Func1<Integer, Boolean>() { @Override public Boolean call(Integer item) { return( item < 4 ); } }) .subscribe(new Subscriber<Integer>() { @Override public void onNext(Integer item) { System.out.println("Next: " + item); } @Override public void onError(Throwable error) { System.err.println("Error: " + error.getMessage()); } @Override public void onCompleted() { System.out.println("Sequence complete."); } });
Output
Next: 1 Next: 2 Next: 3 Sequence complete.
3. まず、この関数を呼び出して許可します。最初の項目のみが送信される送信データキュー。
サンプルコード
Observable.just(1, 2, 3) .first() .subscribe(new Subscriber<Integer>() { @Override public void onNext(Integer item) { System.out.println("Next: " + item); } @Override public void onError(Throwable error) { System.err.println("Error: " + error.getMessage()); } @Override public void onCompleted() { System.out.println("Sequence complete."); } });
Output
Next: 1 Sequence complete.同様の関数には、firstOrDefault() が含まれます。この関数は、キュー送信プロセス中にデフォルト値、つまり最初の項目が見つからない場合に送信します。値が送信されます。
4.Last
この関数を呼び出すと、送信データキューは最後のアイテムのみを送信できます。
サンプルコードObservable.just(1, 2, 3)
.last()
.subscribe(new Subscriber<Integer>() {
@Override
public void onNext(Integer item) {
System.out.println("Next: " + item);
}
@Override
public void onError(Throwable error) {
System.err.println("Error: " + error.getMessage());
}
@Override
public void onCompleted() {
System.out.println("Sequence complete.");
}
});
Output
Next: 3 Sequence complete.同様の関数には、lastOrDefault(T)
5.ElementAt
ElementAt演算子は、元のObservableによって発行されたデータシーケンスの指定されたインデックス位置にあるデータ項目を取得し、それを独自のものとして扱います データのみが出力されます。
負の数値を渡す場合、または元の Observable 内のデータ項目の数が Index+1 より小さい場合、IndexOutOfBoundsException がスローされます。 サンプルコードは次のとおりです:
Observable.just(1, 2, 3, 4, 1, 4) .elementAt(3) .subscribe(new Action1<Integer>() { @Override public void call(Integer value) { Log.i(TAG, "call: " + value); } });
Output
com.m520it.rxjava I/IT520: call: 4
6.Take
Take オペレーターを使用すると、Observable の動作を変更し、最初の N 項目のデータのみを返し、完了通知を発行できます。 、残りのデータは無視されます。
サンプルコード
Observable.just(1, 2, 3, 4, 5, 6, 7, 8) .take(4) .subscribe(new Subscriber<Integer>() { @Override public void onNext(Integer item) { System.out.println("Next: " + item); } @Override public void onError(Throwable error) { System.err.println("Error: " + error.getMessage()); } @Override public void onCompleted() { System.out.println("Sequence complete."); } });
Output
Next: 1 Next: 2 Next: 3 Next: 4 Sequence complete.
7.TakeLast
元のObservableを変更するには、TakeLastオペレータを使用します。以前のデータは無視され、Observableによって出力されたデータの最後のN項目のみを出力できます。
サンプルコード
Observable.just(1, 2, 3, 4, 5, 6, 7, 8) .takeLast(4) .subscribe(new Subscriber<Integer>() { @Override public void onNext(Integer item) { System.out.println("Next: " + item); } @Override public void onError(Throwable error) { System.err.println("Error: " + error.getMessage()); } @Override public void onCompleted() { System.out.println("Sequence complete."); } });
出力
Next: 5 Next: 6 Next: 7 Next: 8 Sequence complete.
8.Sample
送信データを一定の頻度でサンプリングして送信
Observable .interval(1000, TimeUnit.MILLISECONDS)//每秒发送1个数字 .sample(2000,TimeUnit.MILLISECONDS)//每2秒采样一次 .subscribe(new Action1<Long>() { @Override public void call(Long aLong) { Log.i(TAG, "call: "+aLong); } });
上記のコードは、0、2、4、6、8を出力します。 。 。 。
9.IgnoreElements
Observable によって出力されたデータは気にしないが、完了またはエラーで終了したときに通知を受け取りたい場合は、Observable でignoreElements オペレーターを使用できます。観察が呼び出されることはありません または の onNext() メソッド。
Observable.just(1, 2, 3, 4, 1) .ignoreElements()//不发送任何信息 直接发送onCompleted() .subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { Log.i(TAG, "onCompleted: "); } @Override public void onError(Throwable e) { } @Override public void onNext(Integer integer) { Log.i(TAG, "onNext: "+integer); } });
上記は RxJava_04 [データ送信フィルタリング操作] のテクニックの詳細な紹介です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。
