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

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容