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 observable1 =                                            
            api.getUserBaseInfo(new UserBaseInfoRequest()).subscribeOn(Schedulers.io());      
    
    Observable observable2 =                                           
            api.getUserExtraInfo(new UserExtraInfoRequest()).subscribeOn(Schedulers.io());    
    
    Observable.zip(observable1, observable2,                                                  
            new BiFunction() {         
                @Override                                                                     
                public UserInfo apply(UserBaseInfoResponse baseInfo,                          
                                      UserExtraInfoResponse extraInfo) throws Exception {     
                    return new UserInfo(baseInfo, extraInfo);                                 
                }                                                                             
            }).observeOn(AndroidSchedulers.mainThread())                                      
            .subscribe(new Consumer() {                                             
                @Override                                                                     
                public void accept(UserInfo userInfo) throws Exception {                      
                    //do something;                                                           
                }                                                                             

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

你可能感兴趣的:(RxJava系列之zip操作符及项目实际使用案例)