您的位置:首页 > 编程语言 > Java开发

RxJava操作符(08-条件和布尔操作)

2016-06-14 14:59 573 查看
转载请标明出处:

http://blog.csdn.net/xmxkf/article/details/51671826

本文出自:【openXu的博客】

目录:

All

Amb

Contains

DefaultIfEmpty

SequenceEqual

SkipUntil

SkipWhile

TakeUntil

TakeWhile

源码下载

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

源码下载:

https://github.com/openXu/RxJavaTest
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: