• 一篇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

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


    扫码关注公众号有惊喜

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

  • 相关阅读:
    6-Python爬虫-分布式爬虫/Redis
    ES 查询时 排序报错(fielddata is disabled on text fileds by default ... )解决方法
    Intellij Idea webstorm 激活
    Intellij Idea 配置jdk
    java 获取(格式化)日期格式
    js 跳转 XSS漏洞 预防
    CSS去掉背景颜色
    js对象无法当成参数传递 解决方法
    Elasticsearch java api
    java多条件查询SQL语句拼接的小技巧
  • 原文地址:https://www.cnblogs.com/forezp/p/9852192.html
Copyright © 2020-2023  润新知