• 一篇RxJava友好的文章(二)


    上一篇文章介绍了rxjava的基本用法,和一些常用的操作符,以及rxjava的链式操作带来的好处。由于rxjava非常的强大,让我如此的痴迷,我打算写五篇文章,专门讲解rxjava 常见的操作符和用法,敬请期待。这篇文章主要讲解过滤操作符。

    1.distinct操作符

    过滤掉重复的数据项,只让还没有发送过数据项通过。

    Paste_Image.png

      
     rx.Observable.just("1","2","2","3","4")
       .distinct(new Func1<String, String>() {
                @Override
                public String call(String s) {
                    return "key"+s;//这时候比较的是key+s  而不是比较s
                }
            })
        .subscribe(new Action1<String>() {
                @Override
                public void call(String s) {
                    Log.e(TAG,s);
                }
            });
        }
    

    运行程序,输出结果 :

    1

    2

    3

    4

    它的作用是去掉相同的元素,例如例子中去掉了2

    2.ElementAt

    只发射第n项数据

    Paste_Image.png

       rx.Observable.just("1","2","3")
       .elementAt(1)
       .subscribe(new Action1<String>() {//只发射第二个元素
                @Override
                public void call(String s) {
                    Log.e(TAG,s);
                }
            });
    
            rx.Observable.just("1","2","3")
            .elementAtOrDefault(11,"11111")
            .subscribe(new Action1<String>() {//只发射第二个元素
                @Override
                public void call(String s) {
                    Log.e(TAG,s);
                }
            });       
                                
    

    运行结果:

    2

    11111

    elemntAt(1)发射第二项数据;elementAtOrDefault(11,“11111”),由于observable没有11找个索引元素,所以发送了默认的11111

    3.first操作符

    只发射第一项数据或者满足条件的第一项数据,如果你需要第一项数据,或者满足条件的第一项数据,可以使用该操作符

    Paste_Image.png

    rx.Observable.just("1","2","3")
      .first()
      .subscribe(new Action1<String>() {
                @Override
                public void call(String s) {
                    Log.e(TAG,s);
                }
            });
    
    rx.Observable.just(1,2,3)
       .first(new Func1<Integer, Boolean>() {
              @Override
            public Boolean call(Integer integer) {
               if(integer>2) return true;
                  return false;
              }
            })
        .subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                 Log.e(TAG,integer+"");
              }
          }); 
    

    运行结果:

    1

    3

    4.last 操作符

    last只发射最后一项数据,和first 正好相反。

    rx.Observable.just(1,2,3,4)
    .last().subscribe(new Action1<Integer>() {
                @Override
                public void call(Integer integer) {
                    Log.e(TAG,integer+"");
                }
            });
    

    允许结果:

    4

    5.sample操作符

    定期采样并发射 observable 最近的数据

    Paste_Image.png

    rx.Observable.interval(300, TimeUnit.MILLISECONDS)
       .sample(2,TimeUnit.SECONDS)
       .subscribe(new Action1<Long>() {
                @Override
                public void call(Long aLong) {
                    Log.e(TAG,aLong+"");
                }
            });
    
    

    运行结果:

    6

    13

    observal 每300ms发射一个从0到n的数据,sample 每隔2s取一个observal 最近发射的数据,并发射出去。

    6.skip操作符

    跳过前n项数据,也就说不发射前n项数据。

    Paste_Image.png

    rx.Observable.just(1,2,4,5,6)
        .skip(2)
        .subscribe(new Action1<Integer>() {
                @Override
                public void call(Integer integer) {
                    Log.e(TAG,integer+"");
                }
            });
    
    

    运行结果:

    4

    5

    6

    前面2项数据跳过不发射。

    所有的过滤操作符:

    Paste_Image.png

    好了,今天的讲解了过滤操作符,写了这篇文章相信你很快就会理解。
    过滤操作符不止这些,另外还有很多其他的过滤操作符,需要你们自己一个一个的摸索了。感谢大家,如果觉得可以点个赞吧,哈哈……
    _


    扫码关注公众号有惊喜

    (转载本站文章请注明作者和出处 方志朋的博客

  • 相关阅读:
    “终身幼儿园”:学习是一个创造的过程
    我对ERP实质的理解(陈启申)
    Java学习记录1java并发编程之synchronized初学
    谈谈你对Spring的理解
    java中的==与equals的区别
    Windows下编译安装perl Module
    win系统用virtualBox安装Ubuntu虚拟机,如何共享数据
    Windows下emacsw3m设置代理
    自我介绍
    document 对象
  • 原文地址:https://www.cnblogs.com/forezp/p/9852192.html
Copyright © 2020-2023  润新知