RX操作符之Observable的建立方式一(just、from、repeat、repeatWhen)
阿新 • • 發佈:2019-01-07
以下的建立方法不需要手動再重新呼叫Subscriber中的方法
一、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);
執行結果:
4.doWhile
屬於可選包rxjava-computation-expressions
,不是RxJava標準操作符的一部分。doWhile
在原始序列的每次重複後檢查某個條件,如果滿足條件才重複發射。
5.whileDo
屬於可選包rxjava-computation-expressions
,不是RxJava標準操作符的一部分。whileDo
在原始序列的每次重複前檢查某個條件,如果滿足條件才重複發射。