1. first()
2. first(Func1)
3. firstOrDefault(T)
4. firstOrDefault(T, Func1)
5. takeFirst(Func1)
1.first()
只发射第一个数据,使用没有参数的first操作符。
Integer[] ints={1,2,3,4};
Observable.from(ints)
.first()
.subscribe(new Subscriber<Integer>() {
@Override public void onCompleted() {
Log.d("TAG","onCompleted");
}
@Override public void onError(Throwable e) {
Log.d("TAG","onError");
}
@Override public void onNext(Integer integer) {
Log.d("TAG",integer+"");
}
});
运行结果:
1
onCompleted
2. first(Func1)
发射第一个满足条件的数据。
Observable.from(ints)
.first(integer -> integer%2==0)
.subscribe(new Subscriber<Integer>() {
@Override public void onCompleted() {
Log.d("TAG","onCompleted");
}
@Override public void onError(Throwable e) {
Log.d("TAG","onError");
}
@Override public void onNext(Integer integer) {
Log.d("TAG",integer+"");
}
});
运行结果:
2
onCompleted
如果条件不满足的话会执行onError抛出NoSuchElementException异常。
3. firstOrDefault(T)
firstOrDefault与first类似,如果没有数据发射,则会发射默认数据-1;
Integer[] ints1={};
Observable.from(ints1)
.firstOrDefault(-1)
.subscribe(new Subscriber<Integer>() {
@Override public void onCompleted() {
Log.d("TAG","onCompleted");
}
@Override public void onError(Throwable e) {
Log.d("TAG","onError");
}
@Override public void onNext(Integer integer) {
Log.d("TAG",integer+"");
}
});
运行结果:
-1
onCompleted
4. firstOrDefault(T, Func1)
判定条件是否满足,如果没有满足条件的数据时就发射一个默认值。
Integer[] ints2={1,3,5};
Observable.from(ints2)
.firstOrDefault(-1, integer -> integer%2==0)
.subscribe(new Subscriber<Integer>() {
@Override public void onCompleted() {
Log.d("TAG","onCompleted");
}
@Override public void onError(Throwable e) {
Log.d("TAG","onError");
}
@Override public void onNext(Integer integer) {
Log.d("TAG",integer+"");
}
});
运行结果:
-1
onCompleted
5. takeFirst(Func1)
Observable.from(ints2)
.takeFirst(integer -> integer%2==0)
.subscribe(new Subscriber<Integer>() {
@Override public void onCompleted() {
Log.d("TAG","onCompleted");
}
@Override public void onError(Throwable e) {
Log.d("TAG","onError");
}
@Override public void onNext(Integer integer) {
Log.d("TAG",integer+"");
}
});
takeFirst与first类似,除了这一点:如果原始Observable没有发射任何满足条件的数据,first会抛出一个NoSuchElementException,takeFist会返回一个空的Observable(不调用onNext()但是会调用onCompleted)。
运行结果:
onCompleted