RxJava2/RxAndroid2的merge操作合并多个Observable

RxAndroid2/RxJava2的merge操作合并若干个Observable为单个可观测的Observable,形成单一线性的Observable输出结果,例如代码:

package zhangphil.app;import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;import java.util.concurrent.Callable;import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.functions.BiFunction;
import io.reactivex.observers.DisposableObserver;
import io.reactivex.schedulers.Schedulers;public class MainActivity extends AppCompatActivity {private final String TAG = getClass().getSimpleName();private CompositeDisposable mCompositeDisposable = new CompositeDisposable();@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);test();}private void test() {DisposableObserver disposableObserver = new DisposableObserver<String>() {@Overridepublic void onNext(String s) {Log.d(TAG, "#####开始#####");Log.d(TAG + "数据", String.valueOf(s));Log.d(TAG, "#####结束#####");}@Overridepublic void onComplete() {}@Overridepublic void onError(Throwable e) {Log.e(TAG, e.toString(), e);}};mCompositeDisposable.add(Observable.merge(getObservableA(null),getObservableB(null),getObservableA(null),getObservableB(null)).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribeWith(disposableObserver));}@Overrideprotected void onDestroy() {super.onDestroy();// 如果退出程序,就清除后台任务mCompositeDisposable.clear();}private Observable<String> getObservableA(Object o) {return Observable.fromCallable(new Callable<String>() {@Overridepublic String call() throws Exception {try {Thread.sleep(500); // 假设此处是耗时操作} catch (Exception e) {e.printStackTrace();}return "A";}});}private Observable<String> getObservableB(Object o) {return Observable.fromCallable(new Callable<String>() {@Overridepublic String call() throws Exception {try {Thread.sleep(1000); // 假设此处是耗时操作} catch (Exception e) {e.printStackTrace();}return "B";}});}
}

代码输出结果:

05-15 13:40:41.929 12972-12972/zhangphil.app D/MainActivity: #####开始#####
05-15 13:40:41.929 12972-12972/zhangphil.app D/MainActivity数据: A
05-15 13:40:41.929 12972-12972/zhangphil.app D/MainActivity: #####结束#####
05-15 13:40:42.930 12972-12972/zhangphil.app D/MainActivity: #####开始#####
05-15 13:40:42.930 12972-12972/zhangphil.app D/MainActivity数据: B
05-15 13:40:42.930 12972-12972/zhangphil.app D/MainActivity: #####结束#####
05-15 13:40:43.430 12972-12972/zhangphil.app D/MainActivity: #####开始#####
05-15 13:40:43.431 12972-12972/zhangphil.app D/MainActivity数据: A
05-15 13:40:43.431 12972-12972/zhangphil.app D/MainActivity: #####结束#####
05-15 13:40:44.431 12972-12972/zhangphil.app D/MainActivity: #####开始#####
05-15 13:40:44.431 12972-12972/zhangphil.app D/MainActivity数据: B
05-15 13:40:44.431 12972-12972/zhangphil.app D/MainActivity: #####结束#####

RxJava2 / RxAndroid2的merge操作合并多个Observable相关推荐

  1. dataframe常用操作_Pandas | Dataframe的merge操作,像数据库一样尽情join

    点击上方蓝字,关注并星标,和我一起学技术. 今天是pandas数据处理第8篇文章,我们一起来聊聊dataframe的合并. 常见的数据合并操作主要有两种,第一种是我们新生成了新的特征,想要把它和旧的特 ...

  2. MS SQL SERVER 中merge join合并连接介绍(转)

    1概述 Merge join 合并连接.两个集合进行merge join,需要有一个等值的条件,然后需要两个已排序好的集合. 2 one-to-many与many-to-many 2.1 One-to ...

  3. git merge本地合并分支出现文件冲突处理方法

    好久不见,我是今越.和大家分享下开发工作当中遇到合并文件冲突问题的处理方法. git merge本地合并分支出现文件冲突的处理步骤总结: 第一步,根据 git 提示,找到冲突的文件,解决冲突(注意:冲 ...

  4. IntelliJ IDEA 详细图解 svn merge 分支合并主干,主干合并分支,都是merge一个套路

    这个merge,可能在没接触过分支合并主干,或者主干合并,或者分支合并分支的时候,你会在更新代码,代码冲突的时候,会看到这个merge 单词. 其实,不管是从哪合并到哪,套路都是一样的.重点是,你要搞 ...

  5. Git如何撤销merge操作

    Git如何撤销merge操作.当 merge 以后还有别的操作和改动时,用 git revert:该命令就是为撤销某次提交而存在的: 首先,我是明白100047dcc这次提交是有问题的,这是问题的源头 ...

  6. merge r语言daframe_R语言读取多个excel文件后合并:rbind/merge/cmd合并

    问题: 该文件夹下的三个文件理论上列名完全一致,但是在用rbind合并时却提示上述错误,(只能理解为列名确实是不一致导致的问题)解决如下: (1)首先,rbind和cbind()也适用于datafra ...

  7. Pytorch Merge操作

    简述 Pytorch中没有内置Merge操作,需要手动实现. 下面会以多个四维的Tensor直接的Merge操作来展示.(len, *image_shape(占三维)) 比如上面,这样的图片. 每一行 ...

  8. dataframe两个表合并_R语言读取多个excel文件后合并:rbind/merge/cmd合并

    问题: 该文件夹下的三个文件理论上列名完全一致,但是在用rbind合并时却提示上述错误,(只能理解为列名确实是不一致导致的问题)解决如下: (1)首先,rbind和cbind()也适用于datafra ...

  9. MERGE操作学习总结

    MERGE Merge操作要解决的问题 在我们进行数据处理过程中,常常遇到如下操作过程: 用源表数据更新目标表过程,其操作的方式为: 1. 如果满足一定的关联条件,就用源表数据更新目标表: 2. 如果 ...

最新文章

  1. 新手小白 python之路 Day1 (三级菜单功能实现)
  2. 建立一个按年龄排序的有序链表,每个结点包括学号、姓名、性别、年龄。建立一个新的结点,通过年龄将此结点插入到链表中去,使之仍然有序
  3. 关于最近练习PYTHON代码的一点心得
  4. hadoop命令帮助
  5. C#项目打包,并自动安装SQL数据库(转)
  6. 关于拷贝常规数组、std::array和std::vector速度的一些测试
  7. 【Java爬虫】接口模拟微信公众号登录,搜索公众号,获取公众号文章,java实现
  8. 用积木搭出的埃菲尔铁塔
  9. python实现,excel随机抽取特定行到新表中(附上源码和桌面软件)
  10. DNS地址,DNS服务器作用
  11. Python在图片上添加文字
  12. 如何高效设计游戏——游戏策划的自我修养与心得
  13. MAC + IDEA自动生成SerialVersionUID(亲测有效)
  14. 蓝桥ROS机器人之C++基础开发第一个程序
  15. 【后厂村】打工人的愿望
  16. Python处理CSV,Excel,PDF和图片
  17. 计网 | PGP协议实验(邮件加密解密)
  18. aria2 txt导入_aria2 让下载提速
  19. 避免论文查重小窍门五则
  20. HIT-CSAPP大作业:程序人生-Hello’s P2P

热门文章

  1. 集群 之 LVS + Keepalived
  2. 北信源IPO,拟筹资开发企业级云安全管理平台
  3. Android平台开源项目
  4. 一个进程安全的日志类, Linux实现
  5. SpringBoot系列: 单元测试
  6. Git中.gitignore忽略文件(maven项目)
  7. 论SOA架构的几种主要开发方式
  8. Nginx反向代理Tomcat的配置方法
  9. centos 修改shm
  10. Java调优之jvm和线程的内存分析