作者博客 http://blog.csdn.net/u014165119 前言 阅读本文前请先了解 RxJava 的基本使用。...1~10 个参数,也就说当元素个数小于等于 10 的时候既可以使用just() 也可以使用 from(),否则只能用 from() 方法。...使用场景:从网络获取数据并使用 obsA 对象发射,flatMap() 操作符中可将数据存进数据库并返回一个新的对象 obsB。...extends R> resultSelector); @Beta public final Observable flatMap(final Func1 resultSelector, int maxConcurrent); 举例: 5 过滤 filter() public final Observable filter(Func1
RxJava 中对应的实现是 zip 和 zipWith。 zip ? RxJava 中,zip() 的重载方法有 11 种: ?...前 2 个支持以 Iterable 或者数组的形式传入多个 Observable,后面 9 个分别支持从 1 到 9 个 Observable 作为参数,所有方法的最后一个参数是一个函数,它接收各个 Observable...right, leftDuration, rightDuration, resultSelector)); } 前三个参数和 join() 一致,不同之处在与第四个参数: new Func2RxJava 中 concat() 是一个静态方法,有多种重载,区别就是拼接的 Observable 个数,concat() 会将参数中的 Observable 按在参数中的位置发射出去。 ?...使用起来也很简单,没什么好说的了。
2) 创建 Observable Observable 即被观察者,它决定什么时候触发事件以及触发怎样的事件。...线程控制 线程控制 —— Scheduler (一) 在RxJava 中,Scheduler ——调度器,相当于线程控制器,RxJava 通过它来指定每一段代码应该运行在什么样的线程。...Bitmap showBitmap(bitmap); } }); map()方法将参数中的 String对象转换成一个 Bitmap对象后返回,而在经过 map()方法后,事件的参数类型也由 String...五.与EVENTBUS的区别 EventBus是一个发布 / 订阅的事件总线。简单点说,就是两人约定好怎么通信,一人发布消息,另外一个约定好的人立马接收到你发的消息。...3.能够知道什么时候订阅者已经接收了全部的数据。
前面两篇文章中我们介绍了RxJava的一些基本概念和RxJava最简单的用法。从这一篇开始,我们开始聊聊RxJava中的操作符Operators。...RxJava中的操作符主要分成了三类: 转换类操作符(map flatMap concatMap flatMapIterable switchMap scan groupBy …); 过滤类操作符(fileter...可以看出: map() 方法将参数中的 String 对象转换成一个 Bitmap 对象后返回,而在经过 map() 方法后,事件的参数类型也由 String 转为了 Bitmap。...这种直接变换对象并返回的,是最常见的也最容易理解的变换。不过 RxJava 的变换远不止这样,它不仅可以针对事件对象,还可以针对整个事件队列,这使得 RxJava 变得非常灵活。...map被订阅时每传递一个事件执行一次onNext方法, flatmap多用于多对多,一对多,再被转化为多个时,一般利用from/just进行一一分发。
,只留下核心部分,简化的模拟执行流程如下: 首先,模拟HystrixCommand的事件发送机制,每100毫秒发送一个随机值(0或1),随机值为0代表失败,为1代表成功,模拟命令完成事件流。...- 滑动窗口的和: 在这个示例程序的代码中,eventStream流通过interval操作符每100毫秒发送一个随机值(0或1),随机值为0代表失败,为1代表成功,模拟HystrixCommand的事件发送机制...然后通过flatMap扁平化操作符对每一个Observable进行聚合,计算出各元素的累加值。...inputEventStream弹射出来;第二个参数numBuckets为设置的滑动窗口中的桶数量; 第三个参数bucketSizeInMs为每个桶对应的时间长度;第四个参数为将原始事件统计到累积桶(Bucket...桶计数流BucketedCounterStream的处理过程如图5-17所示。 图5-17 桶计数流BucketedCounterStream的处理过程 什么是累积桶呢?
RxJava可以说是2016年最流行的项目之一了,最近也接触了一下RxJava,于是想写一篇博客,希望能通过这篇博客让大家能对其进行了解,本篇博客是基于RxJava2.0,跟RxJava1.0还是有很多不同的...注意:但是事件的发送是有一定的规定的,就好比寄快递也要有一定要求,不是什么都能寄的: 1.被观察者可以发送无限个onNext, 观察者也可以接收无限个onNext. 2.当Observable发送了一个...super T> observer) {} 不带任何参数的subscribe() 表示Observer不关心任何事件,Observable发送什么数据都随你 带有一个Consumer参数的方法表示...这两个操作符的共同点在于,他们都是把一个对象转换为另一个对象,但须注意以下这些特点: 1.flatMap 返回的是一个Observable对象,而 map 返回的是一个普通转换后的对象; 2.flatMap...,Complete, 另一个发送A,B,C,Complete, 接着用Zip把发出的事件组合, 来看看运行结果吧: 观察发现observable1发送事件后,observable2才发送 这是因为我们两个
来总结一下我RxJava遇到的坑,或者说我为什么不在推荐使用RxJava。相信熟悉或者关注我的朋友,绝大多数都是因为RxJava。所以看到这个标题你已经会惊讶。...作为RxJava坚定的拥护者,或者说自干五?为什么突然不再支持RxJava了呢? 先讲讲历史 在我的文章中已经讲过很多次RxJava诞生之初就是因为异步。...你永远无法预测你同事的RxJava水平 上面几点可能有点抽象,而这点和接下来的几点都是我在实际工作中遇到的实际情况。首先就是你并不能预测或者要求你的同事RxJava到达什么样的水平。...还有flatMap和concatMap的区别。简单的讲map是一对一,flatMap是一对N的map然后在进行flatten操作。还有些教程直接写出flatMap无序,concatMap有序。...这个Bug还是后台反馈给我的说为什么android每次都会发两个一模一样的请求?其实问题就出在stationLine和station并没有共享结果。造成了每次请求都要发两次。
距离上一次更新关于RxJava也有一段时间了,其实这篇文章我早就想写,碍于一直没来得及总结(懒)。所以一直没有成文,今天就来总结一下我RxJava遇到的坑,或者说我为什么不在推荐使用RxJava。...你永远无法预测你同事的RxJava水平 上面几点可能有点抽象,而这点和接下来的几点都是我在实际工作中遇到的实际情况。首先就是你并不能预测或者要求你的同事RxJava到达什么样的水平。...RxJava的行为并不可预期 RxJava还有一大毛病就是光看方法名你很难知道他的真正意思。 在初学RxJava时候,两个一直纠缠不清的问题就是map和flatMap的区别。...这个Bug还是后台反馈给我的说为什么android每次都会发两个一模一样的请求? 其实问题就出在stationLine和station并没有共享结果。造成了每次请求都要发两次。...而且虽然RxJava的文档是我见过少有写的非常出色的库,但是很多操作符如果不读通源码,仅仅从Java Doc和Method Signature来观察,并不清楚期待的行为是什么。
今天要介绍两个我认为是RxJava中最牛逼的Operator, map和flatmap。 在掌握map和flatmap的基础上,就可以去了解RxJava的核心操作 lift() 。...看定义不如看代码,下面是之前通过网络获取天气情况的demo中的代码,用的是 Retrofit + RxJava, Observable.from(cities) .flatMap(new...注意这里说的是他们的参数 Func1 在返回值上的差异,不要搞成map和flatmap的返回值了,这俩的返回值都一样。...flatmap() 和 map() 花这么多篇幅讲这两个方法是因为它们是进一步了解RxJava的切入口,看 flatmap() 的源码就明白了, public final Observable什么我们要先熟悉 just/from/merge,map/flatmap,这些方法,再去了解 lift 的原因。 实际上在开发中掌握到 flatmap就能覆盖80%的业务需求了。
前两篇Android RxJava的使用(一)基本用法、Android RxJava的使用(二)Action介绍了RxJava的基本用法,对Rxjava还不了解的请先看以上两篇。...这篇为大家讲解RxJava中map和flatMap的使用。...student2) //使用map进行转换,参数1:转换前的类型,参数2:转换后的类型 .map(new Func1flatMap理解起来有点绕,刚接触flatMap的时候我也是懵逼一个。下面我将flatMap的示意图,希望能帮助理解: ?...flatMap示意图 由上图可以看出Student1、Student2经过flatMap后,按顺序依次经历了Observable1、Observable2,分别转化为Course。
那么这节课我们主要讲解Rxjava2的基本使用和操作符。其实网上的关于Rxjava2的优秀文章有很多对我来说都是受益匪浅。...这篇我们主要是讲解Rxjava2的简单用法已经场景 ---- 首先我们先在我们的项目中添加依赖 compile 'io.reactivex.rxjava2:rxjava:2.0.0-RC5' compile.../RxJava RxAndroid : https://github.com/ReactiveX/RxAndroid 我把2者的官网发出来了大家有兴趣的可以大家了解 有的人会问RxAndroid是什么...我在把Rxjava文档给大家发出来方便大家对Rxjava更多的了解 Rxjava所有操作符文档 ---- Rxjava2的操作符 create just fromArray map flatMap zip...通过链式书写将所有操作一起完成,如果还有复杂的请求我们可以继续往下写。 为什么在等落的时候我们用的是flatmap而不是map呢?
那 interval 和我这 create 有什么区别,不都是 1 秒发一次嘛,看 interval 源码,看到里面是创建了 worker 线程,然后定时执行的,所以 create 这个也放到子线程去,...extends R> resultSelector) public final Observable flatMap(Function发一次都通过一个 onComplete 标记,最终外层的 Observer 收到一个 onComplete 事件。...当在产生 B1 的同时,C1 已经产生了,这样就会忽略 B1 且不再监视 ObservableB。...关于 flatMap、concatMap、concatMapEager 的对比可以参考这篇文章:https://www.javacodegeeks.com/2017/08/flatmap-vs-concatmap-vs-concatmapeager-rxjava-faq.html
在写这几篇 RxJava 笔记时,发现官方文档很久都没有更新啊。 一些前辈两年前写的学习笔记内容跟现在也基本一致,RxJava 2.x 的文档也基本没有,不知道是不是缺实习生。...>getPrintSubscriber()); } 我们使用 interval() 创建一个每隔一秒发射递增整数序列的源 Observable,监视器是每隔 3 秒发射的 Observable...RxJava 中对应的实现是 flatMap(): public final Observable flatMap(Func1<? super T, ?...Scan Scan 的作用是扫描、累积。 它可以将每次发射的数据都进行指定的函数计算,计算的结果作为参数参与下一次计算。 ? RxJava 中有两种实现。...scan(accumulator) 第一种是接收一个 Func2 作为参数: public final Observable scan(Func2 accumulator) {
所以今天再回头整理一下RxJava的头绪,一方面给其它想了解RxJava的人提供参考,另一方面也是给自己将来再遗忘时回来翻阅。 1、RxJava是什么?...我们有Handler、AsyncTask等,都是简单好用的,为什么我们还要学习这么复杂的RxJava呢,原因就是RxJava更强,我总结了一下几点: 流式代码,书写和阅读都很流畅 线程切换方便快捷,支持...RxJava 通过Scheduler它来指定每一段代码应该运行在什么样的线程。...flatMap() 的原理是这样的:1. 使用传入的事件对象创建一个 Observable 对象;2. 并不发送这个 Observable, 而是将它激活,于是它开始发送事件;3....concatMap() scan 对一个序列的数据应用一个函数,并将这个函数的结果发射出去作为下个数据应用函数时的第一个参数使用,看一个例子: Observable.just(1, 2, 3, 4, 5
一、前言 最近在看springcloud的熔断机制的实现,发现底层使用的rxjava实现,就看了下rxjava的使用,发现rxjava使用可也便捷实现前面讲解的定时生产与消费。...image.png prouducerTimer是一个定时器做生产者使用,间隔3s调用一次run方法 代码(1)创建一个任务 代码(2)创建一个观察者对象,Observable.interval方法间隔...1秒发射出一个对象,比如第一秒发射出0,第二秒发射出1....。...这里保证了生成的观察这对象只会发射出3个元素,并且是间隔1s发出。但是这时候发射出的是0,1,2而不是代码(1)生成的任务。所以使用flatMap方法对元素进行转换,转换为代码(1)生成的元素。...image.png 可知同一个元素在连续的3s内被消费了。 三、总结 rxjava的功能挺强大的,合理的排列他提供的功能可以大大简化我们的开发成本。 作者:加多
下面我们就来演示如何通过RxJava2来轻松实现上面的三点需求,通过这篇文章,我们将学习retryWhen操作符的具体用法,retryWhen和repeatWhen经常被大家用来比较,如果对repeatWhen...感兴趣的同学可以阅读上一篇文章 RxJava2 实战知识梳理(5) - 简单及进阶的轮询操作。...也就是说,它 仅仅是作为一个是否要触发重订阅的通知,onNext发送的是什么数据并不重要。...在Function函数中,必须对输入的 Observable进行处理,这里我们使用的是flatMap操作符接收上游的数据,对于flatMap的解释,大家可以参考 RxJava2 实战知识梳理...2.2 retryWhen 和 repeatWhen 对比 在 RxJava2 实战知识梳理(5) - 简单及进阶的轮询操作 中我们已经对repeatWhen进行了介绍,让我们再来看一下它的原理图
类型 RxJava中常见的变换操作符如下: 下面,我将对每种操作符进行详细介绍 注:本文只讲解RxJava2在开发过程中常用的变换操作符 3....应用场景 & 对应操作符 介绍 下面,我将对 RxJava2 中的变换操作符进行逐个讲解 注:在使用RxJava 2操作符前,记得在项目的Gradle中添加依赖: dependencies {...String类型 对象后返回 同时,事件的参数类型也由 Integer 类型变成了 String 类型 3.2 FlatMap() 作用:将被观察者发送的事件序列进行 拆分 & 单独转换,再合并成一个新的事件序列...至此,关于RxJava2中主要的变换操作符已经讲解完毕 4....Demo地址 上述所有的Demo源代码都存放在:Carson_Ho的Github地址:RxJava2_变换操作符 6. 总结 下面,我将用一张图总结 RxJava2 中常用的变换操作符
这有时被称为延续,并且根据应该发生什么以及涉及到什么类型,可能需要使用各种操作符来完成。...某些ReactiveX的Observable操作符有一些变体,它们可以接受一个Scheduler参数。这个参数指定操作符将它们的部分或全部任务放在一个特定的调度器上执行。...RxJava将这个操作符实现为range函数,它接受两个参数,一个是范围的起始值,一个是范围的数据的数目。...onNext(T item):Observable调用这个方法发射数据,方法的参数就是Observable发射的数据,这个方法可能会被调用多次,取决于你的实现。...,onError方法的参数是抛出的异常。
介绍 在RxJava的事件流转过程中,可以改变事件中的事件以及数据,使用的就是RxJava提供的操作符。...从RxJava2-Android-Samples的ReadMe.md中可以看到有如下操作符 操作符 操作符 操作符 操作符 Map Zip Reduce Filter FlatMap Take Skip...是根据传入的参数生成顺序数组的方法。...Filter 如上图所示,如果发送的数大于10,则允许发射,否则会被过滤 FlatMap FlatMap名为扁平映射,它的作用就是将发射端的事件按照FlatMap中定义的策略进行拆分,拆分成多个事件后,...FlatMap 如下示例: 在最开始的发射端,发射0,1,2,而经过了flatMap之后,会将每个接收的事件进行处理,处理后进行二次发射。
操作符 Rxjava提供了对事件序列进行变换的支持; 变换: 核心功能; 就是将事件序列中的(事件)对象或整个序列进行加工处理; 转换成不同的事件或者事件序列; map操作符:就是用来把一个事件转换为另一个事件的...两个), 注意Func1是Rxjava中的一个接口, 它用于包装含有参数的方法, Observable.just("map/image/map.png") .map(new Func1的原因; Rxjava可以通过不同种类的操作符来完成新的Observable的创建, 进而进行链式调用 !!!...map()函数接受一个Func1类型的参数, 然后把这个Func1应用到每一个由Observable发射的值上, 将发射的值转换为我们期望的值; map()是Rxjava中操作符的最常见的一种使用...Rxjava官网上的一张图 map是会将事件一一对应, 映射成一个新的事件, flatmap则会将所有的事件,转换成一个Observable, 然后由这个统一的Observable来进行事件的分发
领取专属 10元无门槛券
手把手带您无忧上云