通过具体的示例,学习每个操作符的用法~
1.Concat
Concat运算符将多个Observable的输出连接起来,使它们像单个Observable一样工作。第一个Observble发出所有项目后第二个Observable开始发送事件,直到所有Observable的事件都发送完。
示例:
Observable.concat(Observable.just(1,2,3),Observable.just(4,5,6))
.subscribe(object :Observer<Int>{
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "---------onSubscribe---------")
}
override fun onNext(t: Int) {
Log.e(TAG, "---------onNext------$t---")
}
override fun onError(e: Throwable) {
Log.e(TAG, "---------onError---------")
}
override fun onComplete() {
Log.e(TAG, "---------onComplete---------")
}
})
输出结果:
2023-01-11 11:18:36.252 E/MathOperator: ---------onSubscribe---------
2023-01-11 11:18:36.252 E/MathOperator: ---------onNext------1---
2023-01-11 11:18:36.253 E/MathOperator: ---------onNext------2---
2023-01-11 11:18:36.253 E/MathOperator: ---------onNext------3---
2023-01-11 11:18:36.253 E/MathOperator: ---------onNext------4---
2023-01-11 11:18:36.253 E/MathOperator: ---------onNext------5---
2023-01-11 11:18:36.253 E/MathOperator: ---------onNext------6---
2023-01-11 11:18:36.253 E/MathOperator: ---------onComplete---------
2. Count
计算源Observable发出的项目数,并将该值作为事项发出。
示例:
Observable.just(2,30,22,5,60,1)
.count()
.subscribe(object :SingleObserver<Long>{
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "---------onSubscribe---------")
}
override fun onSuccess(t: Long) {
Log.e(TAG, "---------onSuccess-------$t--")
}
override fun onError(e: Throwable) {
Log.e(TAG, "---------onError---------")
}
})
输出结果:
2023-01-11 11:25:01.091 E/MathOperator: ---------onSubscribe---------
2023-01-11 11:25:01.091 E/MathOperator: ---------onSuccess-------6--
3.Reduce
Reduce运算符将函数应用于源Observable发出的第一个项,然后将函数的结果与源Observble发出的第二个项一起反馈给函数,继续此过程,直到源Observable发出其最终项并完成,然后从Reduce返回的Observable将发出函数返回的最终值。
示例:
Observable.just(1,2,3,4,5)
.reduce(object:BiFunction<Int,Int,Int>{
override fun apply(t1: Int, t2: Int): Int {
return t1+t2
}
})
.subscribe(object:MaybeObserver<Int>{
override fun onSubscribe(d: Disposable) {
Log.e(TAG, "---------onSubscribe---------")
}
override fun onSuccess(t: Int) {
Log.e(TAG, "---------onSuccess-------$t--")
}
override fun onError(e: Throwable) {
Log.e(TAG, "---------onError---------")
}
override fun onComplete() {
Log.e(TAG, "---------onComplete---------")
}
})
输出结果:
2023-01-11 11:28:18.057 E/MathOperator: ---------onSubscribe---------
2023-01-11 11:28:18.058 E/MathOperator: ---------onSuccess-------15--