このチュートリアルは、RxJava1 に基づいた包括的な説明です。データのさらなるフィルタリングが必要になる場合があります。次のチュートリアルでは、ほとんどのフィルタリング操作の関数について説明します。
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."); } });
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.
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.");
}
});
Next: 3 Sequence complete.
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); } });
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.
元の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.
送信データを一定の頻度でサンプリングして送信
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.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) に注目してください。