検索
ホームページJava&#&チュートリアルRxJava_04のテクニック徹底解説【データ送信フィルタリング動作】

このチュートリアルは、RxJava1 に基づいた包括的な説明です。データのさらなるフィルタリングが必要になる場合があります。次のチュートリアルでは、ほとんどのフィルタリング操作の関数について説明します。
Distinct - 送信された重複データを削除します

    Filter - 条件に基づいて特定のデータをフィルタリングします
  1. First - 送信キューの最初のデータを取得します
  2. Last - 送信キューの最後のデータを取得しますデータの一部
  3. ElementAt - インデックスに基づいてキュー内の特定のデータを送信します
  4. Take - キュー内のデータの最初の n 項目を取得します
  5. TakeLast - データの最後の n 項目を取得しますキュー
  6. Sample - 送信時間に従ってサンプリングして送信します
  7. IgnoreElements - 送信データキューを無視します
  8. 1.Distinct
  9. これでクラスがあり、生徒の情報が入力されました学生制度。同じデータが繰り返されていることが判明しました。生徒のデータ キューは次のとおりです:

    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;
    }
  10. 現在の必要性は、重複した名前を持つオブジェクトをインターセプトすることです。そして、それを出力します:
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=&#39;张三&#39;, age=16}
IT520: call: Student{name=&#39;李四&#39;, age=17}
IT520: call: Student{name=&#39;王二麻子&#39;, 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) に注目してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 英語版

SublimeText3 英語版

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

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

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