Rxjava3 数学运算操作符

通过具体的示例,学习每个操作符的用法~

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--