RxJava笔记

RxJava

为什么要使用RxJava

说到异步操作,我们会想到Android的AsyncTask和Handler。但是随着请求的数量越来越多,代码逻辑
将会变得越来越复杂而RxJava却仍旧能保持清晰的逻辑。RxJava的原理就是创建一个Observable对象来干
活,然后使用各种操作符建立起来的链式操作,就如同流水线一样,把你想要处理的数据一步一步地加工
成你想要的成品,然后发射给Subscriber处理。

创建操作符

  • create
  • just
  • from
  • interval(创建一个按固定时间间隔发射整数序列的Observable)
  • range(创建发射指定范围的整数序列的Observable,可以拿来代替for循环,发射一个范围内的有序整数序列,第一个参数是起始值,并且不小于0;第二个参数为终值,左闭右开)
  • repeat(创建一个N次重复发射特定数据的Observable)

变换操作符

  • map(通过指定一个Func对象,将Observable转换为一个新的Observale对象并发射,观察者将收到信的Observable处理)
  • flatMap(将Observable发射的数据集合变换为Observable集合,然后再将这些Observable发射的数据平坦化地放进一个单独的Observable。flatMap的合并允许交叉,也就是说可能会交错地发送事件,最终结果的顺序可能并不是原始Observable发送时的顺序)
  • cast(强制将Observable发射的所有数据转换为指定类型)
  • concatMap(与flatMap一致;不过,解决了后者交叉的问题)
  • flatMapIterable(可以将数据包装成Iterable,Iterable接口 (java.lang.Iterable) 是Java集合的顶级接口之一。Collection接口继承Iterable,所以Collection的所有子类也实现了Iterable接口)
  • buffer(将源Observable变换为一个新的Observable,这个新的Observable每次发射一组列表值而不是一个一个元素发射)

过滤操作符

  • filter(对源Observable产生的结果自定义规则进行过滤,只有满足条件的才会提交给订阅者)
  • elementAt(用来返回指定位置的数据)
  • distinct(用来去重,其只允许还没有发射过的数据项通过)
  • skip(将源Observable发射的数据过滤掉前N项)
  • take(将源Observable发射的数据只取前N项)
  • ignoreElements(忽略所有源Observable产生的结果,只把Observable的onCompleted和onError时间通知给订阅者)
  • throttleFirst(定期发射这个时间段里源Observable发射的第一个数据,这个操作符默认在computation调度器上执行)
  • throttleWithTimeOut(源Observable每次发射出来一个数据后,就会进行计时,如果在设定好的时间结束前,源Observable有新的数据发射出来,这个数据就会被丢弃)

组合操作符

可以同时处理多个Observable来创建我们所需要的Observable。

  • startWith(会在源Observable发射的数据前面插上一些数据)
  • merge(将多个Observable合并到一个Observable中进行发射,merge可能会让合并的Observable发射的数据交错)
  • concat(与merge类似,只不过是按照严格的顺序发射,前一个Observable没发射完成,是不会发射后一个Observable数据的)
  • zip(合并两个或者多个Observable发射出的数据项,根据指定的函数变换它们,并发射一个新值)
  • combineLastest(讲的有些抽象,还没搞懂)

辅助操作符

  • delay(让原始Observable在发射每项数据之前都暂停一段指定的时间段)
  • Do(Do系列操作符就是为原始Observable的生命周期事件注册一个回调,当Observable的某个事件发生时就会调用这些回调)
  • subscribeOn(用于指定Observable自身在哪个线程上运行)
  • observeOn(用于指定Observer所运行的线程,也就是发射出的数据在哪个线程上使用)
  • timeout(如果原始Observer过了指定的一段时长没有发射任何数据,timeout操作符会以一个onError通知终止这个Observer,或者继续执行一个备用的Observer)

错误处理操作符

  • catch(拦截原始Observeble的onError通知,将它替换为其他数据项或数据序列,让产生的Observeble能够正常终止或者根本不终止)
  • retry(不会将原始Observeble的onError通知传递给观察者,它会订阅这个Observeble,再给它一次机会无错误地完成其数据序列。retry总是传递onNext通知给观察者,由于重新订阅,这可能会造成数据项重复)

条件操作符和布尔操作符

可用于根据条件发射或变换Observer,或者对它们做布尔运算。

布尔操作符

  • all(根据一个函数对源Observeble发射的所有数据进行判断,最终返回的结果就是这个判断结果。这个函数使用发射的数据作为参数,内部判断所有的数据是否满足我们定义好的判断条件。如果全部都满足则返回true,否则就返回false)
  • contains
  • isEmpty

条件操作符

  • amb(对于给定两个或者多个Observeble,它只发射首先发射数据或通知的那个Observeble的所有数据)
  • defaultIfEmpty(发射来自原始Observeble的数据。如果原始Observeble没有发射数据,就发射一个默认的数据)

转换操作符

将Observeble转换为另一个对象或数据结构

  • toList
  • toSortedList(对产生的列表排序,默认是自然升序。如果发射的数据项没有实现Comparable接口,会抛出一个异常。当然,若发射的数据项没有实现Comparable接口,可以使用toSortedList(Func2)变体,其传递的函数参数Func2会作用于比较两个数据项)
  • toMap

线程控制

  • Schedulers.immediate():在当前线程运行
  • Schedulers.newThread()
  • Schedulers.io()
  • Schedulers.computation()
  • Schedulers.trampoline()
  • AndroidSchedulers.mainThread():RxAndroid库中提供,在主线程中运行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值