一、amb
当你传递多个Observable给Amb
时,它只发射其中一个Observable的数据和通知:首先发送通知给Amb
的那个,不管发射的是一项数据还是一个onError
或onCompleted
通知。Amb
将忽略和丢弃其它所有Observables的发射物。
Long[]items = {6l,7l,8l,9l,10l};
Observable<Long> observable = Observable.interval(2, TimeUnit.SECONDS).take(5);
Observable<Long> observable1 = Observable.from(items);
Subscriber<Long> subscriber = new Subscriber<Long>() {
@Override
public void onNext(Long v) {
Log.e(TAG, "onNext................." + v);
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
Observable.amb(observable,observable1).subscribe(subscriber);
运行结果:
二、defaultIfEmpty
发射来自原始Observable的值,如果原始Observable没有发射任何值,就发射一个默认值。DefaultIfEmpty
简单的精确地发射原始Observable的值,如果原始Observable没有发射任何数据正常终止(以onCompleted
d的形式),DefaultIfEmpty
返回的Observable就发射一个你提供的默认值。
Long[]items ={};
Observable<Long> observable = Observable.from(items);
Subscriber<Long> subscriber = new Subscriber<Long>() {
@Override
public void onNext(Long v) {
if(v == 1000){
Log.e(TAG, "onNext.................发射了默认的值:" + v);
}else {
Log.e(TAG, "onNext................." + v);
}
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
observable.defaultIfEmpty(1000l).subscribe(subscriber);
运行结果:
三、skipUntil
丢弃原始Observable发射的数据,直到第二个Observable发射了一项数据
//所需发射的数据,在observable1发射之前的数据将会被丢失
Observable <Long> observable = Observable.interval(2,TimeUnit.SECONDS).take(5);
//当此observale发射数据时,observable的数据才会被传递到onNext中
Observable <Long> observable1 = Observable.interval(5,TimeUnit.SECONDS).take(5);
Subscriber<Long> subscriber = new Subscriber<Long>() {
@Override
public void onNext(Long v) {
Log.e(TAG, "onNext................." + v);
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
observable
.skipUntil(observable1)
.subscribe(subscriber);
运行结果:
四、skipWhile
当条件不满足时执行,SkipWhile
订阅原始的Observable,但是忽略它的发射物,直到你指定的某个条件变为false的那一刻,它开始发射原始Observable。
Observable <Long> observable = Observable.interval(2,TimeUnit.SECONDS).take(5);
Subscriber<Long> subscriber = new Subscriber<Long>() {
@Override
public void onNext(Long v) {
Log.e(TAG, "onNext................." + v);
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
observable
.skipWhile(new Func1<Long, Boolean>() {
@Override
public Boolean call(Long aLong) {
return aLong < 4;
}
})
.subscribe(subscriber);
执行结果:
五、takeUntil
当第二个Observable发射了一项数据或者终止时,丢弃原始Observable发射的任何数据。TakeUntil
订阅并开始发射原始Observable,它还监视你提供的第二个Observable。如果第二个Observable发射了一项数据或者发射了一个终止通知,TakeUntil
返回的Observable会停止发射原始Observable并终止。
注:第二个Observable发射一项数据或一个onError
通知或一个onCompleted
通知都会导致takeUntil
停止发射数据
//所需发射的数据,在observable1发射后数据将会被丢失
Observable <Long> observable = Observable.interval(2,TimeUnit.SECONDS).take(5);
//当此observale发射数据时,observable的数据还未被发射的将会被丢失
Observable <Long> observable1 = Observable.interval(5,TimeUnit.SECONDS).take(5);
Subscriber<Long> subscriber = new Subscriber<Long>() {
@Override
public void onNext(Long v) {
Log.e(TAG, "onNext................." + v);
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
observable
.takeUntil(observable1)
.subscribe(subscriber);
运行结果:
六、takeWhile
发射Observable发射的数据,直到一个指定的条件不成立。TakeWhile
发射原始Observable,直到你指定的某个条件不成立的那一刻,它停止发射原始Observable,并终止自己的Observable。takeWhile
操作符返回一个镜像原始Observable行为的Observable,直到某一项数据你指定的函数返回false
那一刻,这个新的Observable发射onCompleted
终止通知。
Observable <Long> observable = Observable.interval(1,TimeUnit.SECONDS).take(5);
Subscriber<Long> subscriber = new Subscriber<Long>() {
@Override
public void onNext(Long v) {
Log.e(TAG, "onNext................." + v);
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
observable
.takeWhile(new Func1<Long, Boolean>() {
@Override
public Boolean call(Long aLong) {
return aLong<4;
}
})
.subscribe(subscriber);
运行结果:
七、all
判断是否所发射的所有数据都满足某个条件
Observable <Long> observable = Observable.interval(1,TimeUnit.SECONDS).take(5);
Subscriber<Boolean> subscriber = new Subscriber<Boolean>() {
@Override
public void onNext(Boolean v) {
Log.e(TAG, "onNext................." + v);
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
observable
.all(new Func1<Long, Boolean>() {
@Override
public Boolean call(Long aLong) {
return aLong > 4;
}
})
.subscribe(subscriber);
八、contains
判断所发射的数据是否包含某个值
Observable <Integer> observable = Observable.just(1, 2, 3, 4, 5);
Subscriber<Boolean> subscriber = new Subscriber<Boolean>() {
@Override
public void onNext(Boolean v) {
Log.e(TAG, "onNext................." + v);
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
observable
.contains(4)
.subscribe(subscriber);
运行结果:
九、exists
只要有任何一项满足条件就返回true
Observable <Integer> observable = Observable.just(1, 2, 3, 4, 5);
Subscriber<Boolean> subscriber = new Subscriber<Boolean>() {
@Override
public void onNext(Boolean v) {
Log.e(TAG, "onNext................." + v);
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
observable
.exists(new Func1<Integer, Boolean>() {
@Override
public Boolean call(Integer integer) {
return integer >=5;
}
})
.subscribe(subscriber);
运行结果:
十、isEmpty
判断所发射的Observable是否为空
Observable <Integer> observable = Observable.just(1, 2, 3, 4, 5);
Subscriber<Boolean> subscriber = new Subscriber<Boolean>() {
@Override
public void onNext(Boolean v) {
Log.e(TAG, "onNext................." + v);
}
@Override
public void onCompleted() {
Log.e(TAG, "onCompleted.................");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, "onError.....................");
}
};
observable
.isEmpty()
.subscribe(subscriber);
运行结果: