轉載請標明出處:
http://blog.csdn.net/xmxkf/article/details/51671826
本文出自:【openXu的博客】
目錄:
1. All
判定是否Observable發射的所有數據都滿足某個條件。 傳遞一個謂詞函數給All操作符,這個函數接受原始Observable發射的數據,根據計算返回一個布爾值。All返回一個只發射一個單個布爾值的Observable,如果原始Observable正常終止並且每一項數據都滿足條件,就返回true;如果原始Observable的任何一項數據不滿足條件就返回False。
示例代碼:
Observable.just(1,2,3,4)
.all(new Func1<Integer, Boolean>() {
@Override
public Boolean call(Integer integer) {
Log.v(TAG, ""+integer);
return integer<3; //判斷是不是發射的所有數據都小於3
}
}).subscribe(new Subscriber<Boolean>() {
@Override
public void onCompleted() {
Log.v(TAG, "onCompleted");
}
@Override
public void onError(Throwable e) {
Log.v(TAG, "onError:"+e.getMessage());
}
@Override
public void onNext(Boolean aBoolean) {
Log.v(TAG, "onNext:"+aBoolean);
}
});
輸出:
1
2
3
onNext:false
onCompleted
2. Amb
傳遞兩個或多個Observable給Amb時,它只發射其中首先發射數據或通知(onError或onCompleted)的那個Observable的所有數據,而其他所有的Observable的發射物將被丟棄。
有一個類似的對象方法ambWith。Observable.amb(o1,o2)和o1.ambWith(o2)是等價的。
示例代碼:
Observable.amb(
//第一個Observable延遲1秒發射數據
Observable.just(1,2,3).delay(1,TimeUnit.SECONDS),
Observable.just(4,5,6))
.subscribe(new Subscriber<Integer>() {
@Override
public void onCompleted() {
Log.v(TAG, "onCompleted");
}
@Override
public void onError(Throwable e) {
Log.v(TAG, "onError:"+e.getMessage());
}
@Override
public void onNext(Integer integer) {
Log.v(TAG, "onNext:"+integer);
}
});
輸出:
onNext:4
onNext:5
onNext:6
onCompleted
3. Contains
Contains
:判斷一個Observable發射的所有數據中,是否包含一個特定的值。給Contains傳一個特定的值,如果原始Observable發射了那個值, 它返回的Observable將發射true,否則發射false。
IsEmpty
:相關的一個操作符IsEmpty用於判定原始Observable是否沒有發射任何數據。
exists
:RxJava中還有一個exists操作符,它通過一個謂詞函數測試原始Observable發射的數據,只要任何一項滿足條件就返回一個發射true的Observable,否則返回一個發射false的Observable。
示例代碼:
//Contains:判定一個Observable是否發射一個特定的值
Observable.just(4,5,6)
.contains(4)
.subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
Log.v(TAG, "contains(4):"+aBoolean);
}
});
//isEmpty:判定原始Observable是否沒有發射任何數據
Observable.just(4,5,6)
.isEmpty()
.subscribe(aBoolean->Log.v(TAG, "isEmpty():"+aBoolean));
//exists操作符,它通過一個謂詞函數測試原始Observable發射的數據,
// 只要任何一項滿足條件就返回一個發射true的Observable,
// 否則返回一個發射false的Observable。
Observable.just(4,5,6)
.exists(new Func1<Integer, Boolean>() {
@Override
public Boolean call(Integer integer) {
return integer<5;
}
})
.subscribe(aBoolean->Log.v(TAG, "exists():"+aBoolean));
輸出:
contains(4):true
isEmpty():false
exists():true
4. DefaultIfEmpty
DefaultIfEmpty簡單的精確地發射原始Observable的值,如果原始Observable沒有發射任何數據正常終止(以onCompletedd的形式),DefaultIfEmpty返回的Observable就發射一個你提供的默認值。
示例代碼:
Observable.empty()
.defaultIfEmpty(10)
.subscribe(integer->Log.v(TAG, "defaultIfEmpty():"+integer));
輸出:
defaultIfEmpty():10
5. SequenceEqual
判定兩個Observables是否發射相同的數據序列。 傳遞兩個Observable給SequenceEqual操作符,它會比較兩個Observable的發射物,如果兩個序列是相同的(相同的數據,相同的順序,相同的終止狀態),它就發射true,否則發射false。
示例代碼:
Observable.sequenceEqual(
//第一個Observable延遲1秒發射數據
Observable.just(4,5,6).delay(1,TimeUnit.SECONDS),
Observable.just(4,5,6))
.subscribe(aBoolean -> Log.v(TAG, "sequenceEqual:"+aBoolean));
輸出:
sequenceEqual:true
6. SkipUntil
SkipUntil訂閱原始的Observable,但是忽略它的發射物,直到第二個Observable發射了一項數據那一刻,它開始發射原始Observable。
示例代碼:
Observable.interval(1, TimeUnit.SECONDS)
.take(6)
.skipUntil(Observable.just(10).delay(3,TimeUnit.SECONDS))
.subscribe(aBoolean -> Log.v(TAG, "skipUntil:"+aBoolean));
輸出:
skipUntil:3
skipUntil:4
skipUntil:5
7. SkipWhile
SkipWhile訂閱原始的Observable,但是忽略它的發射物,直到你指定的某個條件變爲false的那一刻,它開始發射原始Observable。
示例代碼:
Observable.interval(1, TimeUnit.SECONDS)
.take(6)
.skipWhile(new Func1<Long, Boolean>() {
@Override
public Boolean call(Long aLong) {
return aLong<3; //捨棄原Observable發射的數據,直到發射的數據>=3,才繼續發射
}
})
.subscribe(aBoolean -> Log.v(TAG, "SkipWhile:"+aBoolean));
輸出:
SkipWhile:3
SkipWhile:4
SkipWhile:5
8. TakeUntil
TakeUntil訂閱並開始發射原始Observable,它還監視你提供的第二個Observable。如果第二個Observable發射了一項數據或者發射了一個終止通知( onError通知或一個onCompleted通知),TakeUntil返回的Observable會停止發射原始Observable並終止。
示例代碼:
//3s後takeUntil的參數Observable發射數據,停止原始Observable
Observable.interval(1, TimeUnit.SECONDS)
.takeUntil(Observable.timer(3, TimeUnit.SECONDS))
.subscribe(aBoolean -> Log.v(TAG, "TakeUntil:"+aBoolean));
輸出:
TakeUntil:0
TakeUntil:1
9. TakeWhile
TakeWhile發射原始Observable,直到你指定的某個條件不成立的那一刻,它停止發射原始Observable,並終止自己的Observable。
示例代碼:
Observable.interval(1, TimeUnit.SECONDS)
.takeWhile(new Func1<Long, Boolean>() {
@Override
public Boolean call(Long aLong) {
return aLong<3;
}
})
.subscribe(aBoolean -> Log.v(TAG, "TakeWhile:"+aBoolean));
輸出:
TakeWhile:0
TakeWhile:1
TakeWhile:2