流处理
Observable.range(1,5)
.map { it*2 }
.filter { it>5 }
.subscribe { println(it) }
6
8
10
为什么能做到这样的流处理呢?
原理分析
用 O 代表 Observable,M 代表 map,F 代表 filter,-> 代表 subscribe,A 代表 Observer。
则链式调用:
O.M.F -> A
第一步:转化成 Observable
F(M(O)) -> A , 这里的 M 代表 ObservableMap。
第二步:转化成 Observer
O -> M(F(A)),这里的 M 代表 MapObserver。
现在是不是和操作符的顺序一样了。
具体分析
O -> M ,会调用 M.onNext 方法。
M.onNext 方法会执行 mapper 变化,然后调用 F.onNext 方法。
F.onNext 方法会过滤一部分数据,然后调用 A.onNext 方法。
(这里只分析了 onNext 方法,实际上要等所有 onSubscribe 方法都走完,才轮到 onNext 方法。)
简单操作符是指?
比如 map 就是简单操作符,flatMap 就是复杂操作符。
结论
简单操作符链式调用的实质是,最后会形成与操作符顺序相同的 Observer 集合体,
然后从外层向内层传递数据流。
网友评论