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

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值