更多文章请点击http://77blogs.com/?p=170

转载请标明出处:https://www.cnblogs.com/tangZH/p/12088332.htmlhttp://77blogs.com/?p=170

使用场景一:

现在要执行两个任务:

1、输出字符串0

2、输出字符串1

我们就可以使用concat来实现多个数据源。

1、输出字符串0的数据源:

        Observable observableLocal = Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter emitter) throws Exception {
emitter.onNext("0");
emitter.onComplete();
}
}).subscribeOn(Schedulers.io());

2、输出字符串1的数据源:

        Observable observableNet = Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(ObservableEmitter emitter) throws Exception {
emitter.onNext("1");
emitter.onComplete();
}
}).subscribeOn(Schedulers.io());

3、接收多个数据源:

        Observable.concat(observableLocal, observableNet)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer() {
@Override
public void accept(Object o) throws Exception {
Log.d(TAG, (String) o);
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Log.d(TAG, throwable.getMessage());
}
});
}

可以看到Log:

12-23 20:23:48.771 23643-23643/com.status.rxjavasample D/RxJavaHelper: 0
12-23 20:23:48.771 23643-23643/com.status.rxjavasample D/RxJavaHelper: 1

两个字符串都输出了,而且是有序的。

使用场景二、

获取数据,如果从本地缓存中获取得到数据,那么便不从网络获取,否则从网络获取。

我们将上面的1,2两个步骤分别当成从本地缓存获取数据和从网络缓存中获取数据,那么我们需要改变上面的3步骤。

        Observable.concat(observableLocal, observableNet)
.firstElement()
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer() {
@Override
public void accept(Object o) throws Exception {
Log.d(TAG, (String) o);
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
Log.d(TAG, throwable.getMessage());
}
});
}

唯一不同的是加上.firstElement()。

输出的log为:

12-23 20:29:11.731 24458-24458/com.status.rxjavasample D/RxJavaHelper: 0

firstElement操作符:按照顺序依次遍历被观察者中事件,事件不为空,则停止遍历。

RxJava的concat操作符的更多相关文章

  1. 深入浅出RxJava(二:操作符)

    看完这篇blog,我相信你肯定想立即在你的项目中使用RxJava了,这篇blog将介绍许多RxJava中的操作符,RxJava的强大性就来自于它所定义的操作符. 首先先看一个例子: 准备工作 假设我有 ...

  2. RxJava学习笔记(操作符)

    前言 上一篇文章介绍了RxJava的基础知识和简单实现,篇幅已经比较多了,所以把操作符(Operators)相关的内容放在这一篇.有了上一篇文章的基础,相信会比较容易理解操作符相关的内容了. 操作符( ...

  3. Rxjava学习(二操作符)

    操作符是为了解决对Observable对象的变换的问题,操作符用于在Observable和最终的Subscriber之间修改Observable发出的事件 1.filter filter()操作符是可 ...

  4. RxJava系列5(组合操作符)

    RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...

  5. RxJava系列3(转换操作符)

    RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...

  6. RxJava操作符(05-结合操作)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51656736 本文出自:[openXu的博客] 目录: CombineLatest Join ...

  7. RxJava 1.x 笔记:组合型操作符

    最近去检查眼睛,发现度数又涨了,唉,各位猿多注意保护自己的眼睛吧! 前面学了 RxJava 的三种关键操作符: 创建型操作符 过滤型操作符 变换型操作符 读完本文你将了解第四种(组合型操作符): 组合 ...

  8. RxJava 和 RxAndroid 二(操作符的使用)

    前言:对Rx不了解的朋友可以先看我的第一篇博文 RxJava 和 RxAndroid 一 (基础),是对Rxjava的基本介绍 1.merge操作符,合并观察对象 List<String> ...

  9. LINQ标准查询操作符(二)——Join、GroupJoin、GroupBy、Concat、

    四.联接操作符 联接是指将一个数据源对象与另一个数据源对象进行关联或者联合的操作.这两个数据源对象通过一个共同的值或者属性进行关联. LINQ有两个联接操作符:Join和GroupJoin. 1. J ...

随机推荐

  1. jquery的版本 纵多 , 各个版本的插件的融合 ,

    有些插件在哪些版本下没有 插件之间因为版本冲突 是得不偿失的事情

  2. 使用Razor表达式 举数组和集合 精通ASP-NET-MVC-5-弗瑞曼

  3. 巨坑练习题!!!—— Car的旅行线路

    在看题目之前,请童鞋们做好心理准备╮(╯▽╰)╭ 题目描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游. 她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之 ...

  4. Xmind8 Pro 破解教程(序列号|破解文件)

    最近需要打开文件后缀名为.xmind的文件,所以下载了Xmind8 .打开以后想要导出,奈何普通版本只能导出.txt文本文档,所以只好动手pj.话不多说看下边.一.下载XMindCrack.jar文件 ...

  5. 机器学习-计算机视觉和卷积网络CNN

    概述 对于计算机视觉的应用现在是非常广泛的,但是它背后的原理其实非常简单,就是将每一个像素的值pixel输入到一个DNN中,然后让这个神经网络去学习这个模型,最后去应用这个模型就可以了.听起来是不是很 ...

  6. 模块化系列教程 | 深入源码分析阿里JarsLink1.0模块化框架

    1. 概述 1.1 模块动态加载卸载主流程 2. 模块动态加载 2.1 模块加载源码分析 2.1.1 AbstractModuleRefreshScheduler 2.1.2 ModuleLoader ...

  7. DWZ框架-- Dialog点击保存后不能自动关闭

    案例 今天在用DWZ框架做添加功能时,发现在对话框保存成功后,后端返回正确的json格式,但对话框不能自动关闭窗口,而且保存后自动跳回主页,没有停留在当前用户列表页面,具体错误过程重现如下: 1.打开 ...

  8. Hexo+coding实现自动化部署

    前言 昨天写了一篇利于云环境写博客,但是让群里大佬们看了下.评论道:"写的不错,但还是觉得这个云环境太繁琐了,没有CI/CD自动化部署方便".于是我便百度查了下,网上文章大部分是通 ...

  9. hive安装启动错误总结

    错误一: Exception in thread "main" java.lang.NoClassDefFoundError: jline/console/completer/Ar ...

  10. 死磕mysql(5)

    高性能mysql --查看隐藏的库//use mysql --创建新用户//create user 'new'@'localhost' identified by ''; --创建用户 '用户名'@' ...