操作符入門:
RxJava 操作符的類型分為創建操作符、變換操作符、過濾操作符、組合操作符、錯誤處理操作符、輔助操作符、條件和布爾操作符、算數和聚合操作符及連接操作符等。而這些操作符類型下又有很多操作,每個操作又有很多變體。
常用的創建操作符:
常用的有 create、just、from
不常用的有 defer、range、interval、start、repeat 和 timer
一、just操作符方法
創建發送指定值的Observerble,just只是簡單的原樣發射,將數組或Iterable當做單個數據。如果傳遞的值為null,則發送的Observable的值為null。參數最多為9個。
Observable<String> myObservable = Observable.just("just1","just1","just1","just1","just1","just1","just1","just1","just1","just1");
Subscriber<String> mySubscriber = new Subscriber<String>() {
@Override
public void onNext(String s) {
System.out.println(s);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);
二、from方法
將數據轉換成為Observables,而不是需要混合使用Observables和其它類型的數據。
String[]items = {"just1","just1","just1","just1","just1","just1"};
Observable<String> myObservable = Observable.from(items);
Subscriber<String> mySubscriber = new Subscriber<String>() {
@Override
public void onNext(String s) {
System.out.println(s);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);
三、repeat方法
1.repeat()重復地執行某個操作,如果不傳遞參數,結果將會被無限地重復執行,默認在trampoline調度器上執行,該方法為非靜態方法,不可以直接通過Observable來調用
String[]items = {"just1","just2","just3","just4","just5","just6"};
Observable<String> myObservable = Observable.from(items).repeat();
Subscriber<String> mySubscriber = new Subscriber<String>() {
@Override
public void onNext(String s) {
System.out.println(s);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);
2.repeat()如果傳入數字類型的參數,則重復地執行指定次數的某個操作,默認在trampoline調度器上執行,不可以直接通過Observable來調用
String[]items = {"just1","just2","just3","just4","just5","just6"};
Observable<String> myObservable = Observable.from(items).repeat(2);
Subscriber<String> mySubscriber = new Subscriber<String>() {
@Override
public void onNext(String s) {
System.out.println(s);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);
3.repeatWhen()不是緩存和重放原始Observable的數據序列,而是有條件的重新訂閱和發射原來的Observable,當Observable中的call()方法中調用了重復執行的代碼時,onNext()將會被重復執行。如果該方法執行后返回void,則結束執行
final String[]items = {"just1","just2","just3","just4","just5","just6"};
Observable<String> myObservable = Observable.from(items).repeatWhen(new Func1<Observable<? extends Void>, Observable<?>>() {
@Override
public Observable<?> call(Observable<? extends Void> observable) {
return observable.delay(5, TimeUnit.SECONDS);
}
});
Subscriber<String> mySubscriber = new Subscriber<String>() {
@Override
public void onNext(String s) {
System.out.println("onNext.................."+s);
}
@Override
public void onCompleted() {
System.out.println("onCompleted.................");
}
@Override
public void onError(Throwable e) {
System.out.println("onError....................");
}
};
myObservable.subscribe(mySubscriber);