对事件序列中的事件 / 整个事件序列 进行加工处理(即变换),使得其转变成不同的事件 / 整个事件序列 。
map
对每个事件进行变换,并返回一个 Observable,该 Observable 发出这些结果 由函数计算得到。
Observable.just(1,2,3,4).map(object : Function<Int, String>{
override fun apply(t: Int): String {
return "number is $t"
}
}).subscribe(object : Observer<String>{
override fun onSubscribe(d: Disposable?) {
TODO("Not yet implemented")
}
override fun onNext(t: String?) {
TODO("Not yet implemented")
}
override fun onError(e: Throwable?) {
TODO("Not yet implemented")
}
override fun onComplete() {
TODO("Not yet implemented")
}
})
flatmap
link
将被观察者发送的事件序列各自单独转换为一个Observable
,再合并成一个新的事件序列,最后再进行发送。新合并生成的事件序列顺序是无序的, 与旧序列发送事件的顺序无关。
Observable.interval(3, 4, TimeUnit.SECONDS)
.flatMap(object : Function<Long, ObservableSource<String>> {
override fun apply(t: Long): ObservableSource<String> {
val list = ArrayList<String>()
for (i in 0 until 3) {
list.add("事件 $t 的子事件")
}
return Observable.fromIterable(list)
}
}).subscribe {
Log.d(TAG, it)
}
concatMap
使用和flatMap
一致, 但是生成的序列是有序的。根据原始序列变换结果发射数据。
Buffer
定期从 被观察者(Obervable)需要发送的事件中 获取一定数量的事件 & 放到缓存区中,最终发送。
Observable.just(1,2,3,4).buffer(3/*缓存大小*/,1/*步长*/)
.subscribe {
Log.d(TAG, "size = $it.size")
}
//Event:(1,2,3),(2,3,4),(3,4),(4)