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


    组合操作符

    继上一篇讲述了过滤操作符,这一篇讲述组合操作符,组合操作符可用于组合多个Observable。组合操作符相对于过滤操作符要复杂很多,也较难以理解,需要花费时间去看文档查资料,写demo才能有一定的理解,这系列文章的例子将会在系列文章写完同意上传,敬请期待。

    1.starWith操作符

    starWith是在数据序列的开头插入一条指定的项;
    如果你想要一个Observable在发射数据之前先发射一个指定的数据序列,可以使用 StartWith 操作符,原理如图所示。(如果你想一个Observable发射的数据末尾追加一个数据序列可以使用 Concat 操作符,与startwith 相反)

    04c9acfc-6e16-4aac-b683-2fc8a634c72e.png

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

    程序运行结果:

    9,8,1,2,3,4,5

    2.CombineLatest操作符

    当两个Observables中的任何一个发射了数据时,使用一个函数结合每个Observable发射的最近数据项,并且基于这个函数的结果发射数据。原理如图所示:

    b8c10d40-2182-4489-a86e-3fb97e167a1f.png

    Observable.combineLatest(Observable.just(1, 2, 3), 
        Observable.just("a", "b", "c", "d"), new Func2<Integer, String,       String>() {
                @Override
                public String call(Integer integer, String s) {
                    Log.e(TAG,"combineLatest:"+"integer:"+integer+">>String:"+s);
                    return integer+s;
                }
            }).subscribe(new Action1<String>() {
                @Override
                public void call(String s) {
                    Log.e(TAG,s);
                }
            });
    

    运行结果:

    3a 3b 3c 3d

    CombineLatest 在原始的Observable中任意一个发射了数据
    时发射一条数据。当原始Observables的任何一个发射了一条数据时, CombineLatest 使用一个函数结合它们最近发射的数据,然后发射这个函数的返回值。

    3.Merge

    合并多个Observables的发射物;
    使用 Merge 操作符你可以将多个Observables的输出合并,就好像它们是一个单个的Observable一样。Merge 可能会让合并的Observables发射的数据交错(有一个类似的操作符 Concat 不会让数据交错,它会按顺序一个接着一个发射多个Observables的发射物)。

    d4d07187-1e98-4393-b6a3-54e285b7b338.png

    Observable.merge(Observable.just(1,3,4,5),Observable.just(22,33,44))
        .subscribe(new Action1<Integer>() {
                @Override
                public void call(Integer integer) {
                    Log.e(TAG,""+integer);
                }
            });
    
    

    运行结果:

    1,2,3,4,5,22,33,44

    4.zip

    Zip 操作符返回一个Obversable,它使用这个函数按顺序结合两个或多个Observables发射的数据项,然后它发射这个函数返回的结果。它按照严格的顺序应用这个函数。它只发射与发射数据项最少的那个Observable一样多的数据。

      Observable.zip(Observable.just(1, 2, 3, 4, 5), 
            Observable.just("a", "b", "c"), new      Func2<Integer, String, String>() {
                @Override
                public String call(Integer integer, String integer2) {
                    return integer+integer2;
                }
            })
            .subscribe(new Action1<String>() {
                @Override
                public void call(String s) {
                    Log.e(TAG,""+s);
                }
            });
    

    运行结果:

    1a ,2b,3c

    所有的组合操作符:

    这些组合操作符都不是这么容易理解的,需要自己慢慢的领悟,学好rxjava需要投入一定时间和精力,总之多多练习就好了,需要我的这系列文章能够帮助到像我一样对rxjava热爱的人,感谢大家。

    (https://github.com/forezp/banya)
    项目地址:https://github.com/forezp/banya


    扫码关注公众号有惊喜

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

  • 相关阅读:
    面试-Hash是怎么实现的?
    教程-在Delphi中怎么查看是否有内存泄漏(Delphi2007)+WIN7
    面试-SizeOf一个对象会得到什么?
    Unity-Animator深入系列---录制与回放
    Animation.Sample用法介绍
    Unity-Animator深入系列---StateMachineBehaviour状态机脚本学习
    Unity-Animator深入系列---deltaPosition&deltaRotation
    Unity-Animato深入系列---FloatValue阻尼
    Animation在每一帧中的执行顺序测试
    Unity脚本在层级面板中的执行顺序测试2
  • 原文地址:https://www.cnblogs.com/forezp/p/9852188.html
Copyright © 2020-2023  润新知