RxJava - Fensterung

Der Fensteroperator funktioniert ähnlich wie der Pufferoperator, ermöglicht jedoch das Sammeln von von einem Observable ausgegebenen Elementen in einem anderen Observable anstelle einer Sammlung und das Ausgeben dieser Observables anstelle von Sammlungen. Im folgenden Beispiel haben wir ein Observable erstellt, um 9 Elemente auszugeben. Mit dem Fensteroperator werden 3 Observable zusammen ausgegeben.

Fensterbeispiel

Erstellen Sie das folgende Java-Programm mit einem beliebigen Editor Ihrer Wahl, z. B. in C: \> RxJava.

ObservableTester.java

import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;

import java.util.concurrent.TimeUnit;

public class ObservableTester {
   public static void main(String[] args) throws InterruptedException {
      Observable<Integer> observable = Observable.just(1, 2, 3, 4,
         5, 6, 7, 8, 9);

      observable.subscribeOn(Schedulers.io())
         .delay(2, TimeUnit.SECONDS, Schedulers.io())
         .window(3)
         .subscribe(new Observer<Observable<Integer>>() {
            @Override
            public void onSubscribe(Disposable d) {
               System.out.println("Subscribed");
            }
            @Override
            public void onNext(Observable<Integer> integers) {
               System.out.println("onNext: ");
               integers.subscribe(value -> System.out.println(value));
            }
            @Override
            public void onError(Throwable e) {
               System.out.println("Error");
            }

            @Override
            public void onComplete() {
               System.out.println("Done! ");
            }
         });
      Thread.sleep(3000);
   }
}

Überprüfen Sie das Ergebnis

Kompilieren Sie die Klasse mit javac Compiler wie folgt -

C:\RxJava>javac ObservableTester.java

Führen Sie nun den ObservableTester wie folgt aus:

C:\RxJava>java ObservableTester

Es sollte die folgende Ausgabe erzeugen -

Subscribed
onNext: 
1
2
3
onNext: 
4
5
6
onNext: 
7
8
9
Done!