Obersvable的种类
Observable 表示可以发射0-N个Item信号,当收到Complete信号或者Error信号结束,所以这里就有一种可能是成功发射了若干个然后失败,特别注意这点Flowable 从之前的 Observable 中分离出来的,有Observable 的特性的同时支持背压Single 表示只会发送一个信号或者一个Error信号就结束的ObservableMaybe 表示只会收到一个Complete信号或者一个Item信号或者Error信号就结束的ObservableCompleteable 表示只会收到一个Complete信号或者Error信号就结束的Observable
Obersvable操作符
create(emitter -> {}):通过emitter来发射事件,从而创建一个Observable需要自己实现onNext()、onError()、onComplete()的逻辑just©:跟进给定的常量或表达式创建Observable,c如果是表达式,那在订阅前已经完成,成为常量,再次订阅也不会发生改变defer(callable):订阅的时候才会创建Observable,并且为每个订阅者创建自己的Obserable,callable一般为静态回调fromCallable(callable):通过Callable创建Observable与defer略有不同,会更注重Observable的异步的情况fromFuture(future):拥有更多异步可选项,并且可以设置调度器和超时时间fromArray(array)&fromIterable(iterable) :拆分数组、迭代器,依次发射事件repeat(int):重复创建n个int数据的Observablerange():创建数字区间数据的Observableinterval():创建周期发射的Observable,默认调度器为computationtimer():创建延时发射的Observable,默认调度器为computationmap(a -> b:a转成bflatMap(a -> observable:a转成observableconcatMap(a -> observable:flatMap不能保证输出顺序和输入顺序一致,concatMap则是保证顺序的flatMapIterable(a -> iterable):a转为iterable,依次发射scan((a, b) -> f(a, b):f(a, b)的结果传递给下游,同时还会赋值给a,一直累计buffer(int):每集齐int个元素,作为一个集合发射到下游buffer(int, timeUnit):每收集一段时间,收集到的元素作为一个集合发射到下游window(int, timeUnit):与buffer类似,但会创建一个新的Observablecast(clazz):类型强转timeout(int, timeUnit):超时抛异常或发射默认ObservablestartWith©:在事件源之前先发射一个事件,经常配合timer使用filter(a -> boolean):每集齐int个元素,作为一个集合发射到下游take(int):取int项向下游发射skip(int):忽略int项后,再向下游发射elementAt(int):发射第int项debounce(int, timeUnit):防抖,一段时间内无新事件传入才会把该事件向下游发出,否则遗弃throttle(int, timeUnit):采样,一段时间内,只向下游发射第一个或最后一个接收到的事件distinct():过滤重复元素first() / last():只发送指定项或符合条件的指定项merge(o1, o2):组合2个Observable,各自按照自己的顺序事件发射元素concat(o1, o2) :组合2个Observable,先发送的Observable发射完全部元素complete后才到另一个发射amb((o1, o2)):先发射事件的Observable作为真正的Observable,其他的直接抛弃zip((o1, o2) -> f(x, y)):组合2个Observable,两个Observable的元素一一对应的接收到才会组合 f(x, y)的结果向下游发射combineLast((o1, o2) -> f(x, y)):组合2个Observable,不要求两个Observable的元素一一对应,接到任何新元素都会组合新的元素向下游发射,组合方法f(x, y)的x,y分别是连个Observable最新发出来的元素repeat():complete后自动重新订阅repeatWhen(predict):满足条件时,complete则自动重新订阅retry():抛异常则重试,只对其上游的error有效retryWhen(errorObservable -> observable):抛异常时,满足条件重新订阅blockingFirst():阻塞并返回第一个收到的元素blockingForEach(a - f(a)):阻塞每一个元素,直到complete。收到每个元素都调用回调去处理