美文网首页
RxJava系列之zip操作符及项目实际使用案例

RxJava系列之zip操作符及项目实际使用案例

作者: 代码改变人生 | 来源:发表于2019-08-03 17:39 被阅读0次

    1.zip 概述

    zip()合并两个或者多个Observables发射出的数据项,根据指定的函数Func*变换它们,并发射一个新值。下图展示了zip()方法如何处理发射的“numbers”和“letters”然后将它们合并一个新的数据项。

    zip.png
    从上图结果来看,发射器1中的数据“5”在合并后抛弃了,它只发射与发射数据项最少的那个Observable一样多的数据,即Observable1有5个数据,Observables2有4个数据,最终合并只有4个数据。结果集是以发送时最少的为主输出合并数量

    2.实际应用

    • 需求:
    1. 从不同数据源(2个服务器)获取数据,即 合并网络请求的发送
    2. 统一显示结果
      例如:
      一个界面需要展示用户的一些信息, 而这些信息分别要从两个服务器接口中获取, 而只有当两个都获取到了之后才能进行展示。
    • 实现:
        Observable<UserBaseInfoResponse> observable1 =                                            
                api.getUserBaseInfo(new UserBaseInfoRequest()).subscribeOn(Schedulers.io());      
        
        Observable<UserExtraInfoResponse> observable2 =                                           
                api.getUserExtraInfo(new UserExtraInfoRequest()).subscribeOn(Schedulers.io());    
        
        Observable.zip(observable1, observable2,                                                  
                new BiFunction<UserBaseInfoResponse, UserExtraInfoResponse, UserInfo>() {         
                    @Override                                                                     
                    public UserInfo apply(UserBaseInfoResponse baseInfo,                          
                                          UserExtraInfoResponse extraInfo) throws Exception {     
                        return new UserInfo(baseInfo, extraInfo);                                 
                    }                                                                             
                }).observeOn(AndroidSchedulers.mainThread())                                      
                .subscribe(new Consumer<UserInfo>() {                                             
                    @Override                                                                     
                    public void accept(UserInfo userInfo) throws Exception {                      
                        //do something;                                                           
                    }                                                                             
    

    注:Zip操作符里面的两个请求串行实行的,如需需要并发执行,可以给每个流追加一个调度器。详见 https://www.jianshu.com/p/422ffdd80c06

    相关文章

      网友评论

          本文标题:RxJava系列之zip操作符及项目实际使用案例

          本文链接:https://www.haomeiwen.com/subject/huajdctx.html