Rxjava的学习之过滤操作符—first

来源:互联网 发布:阿里云havip怎么开通 编辑:程序博客网 时间:2024/06/07 16:39

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+"");      }    });
运行结果:1onCompleted

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+"");      }    });
运行结果:2onCompleted

如果条件不满足的话会执行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+"");      }    });
运行结果:-1onCompleted

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+"");      }    });
运行结果:-1onCompleted

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
0 0
原创粉丝点击