Rxjava3 条件操作符

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

1.All

确定Observable发射的所有项目是否符合某些标准

示例:

Observable.just(1, 2, 3)
	.all(object : Predicate<Int> {
		override fun test(t: Int): Boolean {
			return t < 3
		}
	})
	.subscribe(object : SingleObserver<Boolean> {
		override fun onSubscribe(d: Disposable) {
			Log.e(TAG, "---------onSubscribe---------")
		}
		override fun onError(e: Throwable) {
			Log.e(TAG, "---------onError---------")
		}
		override fun onSuccess(t: Boolean) {
			Log.e(TAG, "---------onSuccess--------${t}-")
		}
	})

输出结果:

2023-01-11 09:43:38.677 E/ConditionalOperator: ---------onSubscribe---------
2023-01-11 09:43:38.677 E/ConditionalOperator: ---------onSuccess--------false-

2.Amb

在给定两个或多个源Observable,哪个Observable发出第一个项目,那么就仅发送这个Observable的所有项目,其他Observable的所有发送事项都将被舍弃。

示例:

Observable.amb(
		mutableListOf(
			Observable.just(1,3,5).delay(2000, TimeUnit.MILLISECONDS),
			Observable.just(2,4,6).delay(1000, TimeUnit.MILLISECONDS)
		)
	).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---------")
		}
	})

输出结果:

看输出结果,只输出了第二个Observable的事项,而且是onSubscribe之后延迟了1秒,开始发送事项的。

2023-01-11 09:51:05.663 E/ConditionalOperator: ---------onSubscribe---------
2023-01-11 09:51:06.665 E/ConditionalOperator: ---------onNext-----2----
2023-01-11 09:51:06.665 E/ConditionalOperator: ---------onNext-----4----
2023-01-11 09:51:06.665 E/ConditionalOperator: ---------onNext-----6----
2023-01-11 09:51:06.665 E/ConditionalOperator: ---------onComplete---------

 3.Contains

判断Observable发出的项目中是否包含特定项目。

示例:

Observable.just(1, 2, 3)
	.contains(2)
	.subscribe(object : SingleObserver<Boolean> {
		override fun onSubscribe(d: Disposable) {
			Log.e(TAG, "---------onSubscribe---------")
		}
		override fun onError(e: Throwable) {
			Log.e(TAG, "---------onError---------")
		}
		override fun onSuccess(t: Boolean) {
			Log.e(TAG, "---------onSuccess--------${t}-")
		}
	})

输出结果:

2023-01-11 09:56:16.411 E/ConditionalOperator: ---------onSubscribe---------
2023-01-11 09:56:16.411 E/ConditionalOperator: ---------onSuccess--------true-

4.DefaultIfEmpty

如果源Observble不发出任何项目,则发出默认项目。

示例:

Observable.empty<Int>()
	.defaultIfEmpty(100)
	.subscribe(object : Observer<Int> {
		override fun onSubscribe(d: Disposable) {
			Log.e(TAG, "---------onSubscribe---------")
		}
		override fun onError(e: Throwable) {
			Log.e(TAG, "---------onError---------")
		}
		override fun onNext(t: Int) {
			Log.e(TAG, "---------onNext------$t---")
		}
		override fun onComplete() {
			Log.e(TAG, "---------onComplete---------")
		}
	})

输出结果:

2023-01-11 09:59:53.209 E/ConditionalOperator: ---------onSubscribe---------
2023-01-11 09:59:53.210 E/ConditionalOperator: ---------onNext------100---
2023-01-11 09:59:53.210 E/ConditionalOperator: ---------onComplete---------

5.SequenceEqual

判断两个Observable是否发出相同的项目序列。

示例:

Observable.sequenceEqual(
		Observable.just(1, 2, 3,4),
		Observable.just(1, 2, 3).delay(1000, TimeUnit.MILLISECONDS)
	).subscribe(object : SingleObserver<Boolean> {
		override fun onSubscribe(d: Disposable) {
			Log.e(TAG, "---------onSubscribe---------")
		}
		override fun onSuccess(t: Boolean) {
			Log.e(TAG, "---------onSuccess-------$t--")
		}
		override fun onError(e: Throwable) {
			Log.e(TAG, "---------onError---------")
		}
	})

输出结果:

2023-01-11 10:12:28.261 E/ConditionalOperator: ---------onSubscribe---------
2023-01-11 10:12:29.263 E/ConditionalOperator: ---------onSuccess-------false--

6.SkipUntil

SkipUntil操作符订阅源Observable,但忽略其发射,直到第二个Observable发射项目,此时SkipUnil开始镜像源Observable的发射。

 示例:

Observable.interval(1, TimeUnit.SECONDS)
	.take(5)
	.skipUntil(Observable.just(100,200).delay(3, TimeUnit.SECONDS))
	.subscribe(object : Observer<Long> {
		override fun onSubscribe(d: Disposable) {
			Log.e(TAG, "---------onSubscribe---------")
		}
		override fun onError(e: Throwable) {
			Log.e(TAG, "---------onError---------")
		}
		override fun onNext(t: Long) {
			Log.e(TAG, "---------onNext------$t---")
		}
		override fun onComplete() {
			Log.e(TAG, "---------onComplete---------")
		}
	})

输出结果:

第二个Observable延迟3秒发送事件,所以第一个Observable前3秒的事件被舍弃了。

2023-01-11 10:16:28.744 E/ConditionalOperator: ---------onSubscribe---------
2023-01-11 10:16:31.747 E/ConditionalOperator: ---------onNext------2---
2023-01-11 10:16:32.748 E/ConditionalOperator: ---------onNext------3---
2023-01-11 10:16:33.748 E/ConditionalOperator: ---------onNext------4---
2023-01-11 10:16:33.748 E/ConditionalOperator: ---------onComplete---------

7.SkipWhile

SkipWhile操作符使订阅源Observable之后忽略其发射,直到您指定的条件变为false,此时SkipWhile开始发射源Observable的事件。

 示例:

Observable.interval(1, TimeUnit.SECONDS)
	.take(5)
	.skipWhile(object :Predicate<Long>{
		override fun test(t: Long): Boolean {
			return t<2
		}
	})
	.subscribe(object : Observer<Long> {
		override fun onSubscribe(d: Disposable) {
			Log.e(TAG, "---------onSubscribe---------")
		}
		override fun onError(e: Throwable) {
			Log.e(TAG, "---------onError---------")
		}
		override fun onNext(t: Long) {
			Log.e(TAG, "---------onNext------$t---")
		}
		override fun onComplete() {
			Log.e(TAG, "---------onComplete---------")
		}
	})

输出结果:

2023-01-11 10:33:35.965 E/ConditionalOperator: ---------onSubscribe---------
2023-01-11 10:33:38.966 E/ConditionalOperator: ---------onNext------2---
2023-01-11 10:33:39.966 E/ConditionalOperator: ---------onNext------3---
2023-01-11 10:33:40.967 E/ConditionalOperator: ---------onNext------4---
2023-01-11 10:33:40.967 E/ConditionalOperator: ---------onComplete---------

8.TakeUntil

TakeUntil订阅并开始源Observable,它还监视您提供的第二个Observable,在第二个Observable发出项目或终止后,丢弃由源Observable发射的任何项目。

示例:

Observable.interval(1, TimeUnit.SECONDS)
	.takeUntil(Observable.just(100).delay(5, TimeUnit.SECONDS))
	.subscribe(object : Observer<Long> {
		override fun onSubscribe(d: Disposable) {
			Log.e(TAG, "---------onSubscribe---------")
		}
		override fun onError(e: Throwable) {
			Log.e(TAG, "---------onError---------")
		}
		override fun onNext(t: Long) {
			Log.e(TAG, "---------onNext------$t---")
		}
		override fun onComplete() {
			Log.e(TAG, "---------onComplete---------")
		}
	})

输出结果:

2023-01-11 10:41:00.330 E/ConditionalOperator: ---------onSubscribe---------
2023-01-11 10:41:01.333 E/ConditionalOperator: ---------onNext------0---
2023-01-11 10:41:02.333 E/ConditionalOperator: ---------onNext------1---
2023-01-11 10:41:03.334 E/ConditionalOperator: ---------onNext------2---
2023-01-11 10:41:04.333 E/ConditionalOperator: ---------onNext------3---
2023-01-11 10:41:05.333 E/ConditionalOperator: ---------onComplete---------

9.TakeWhile

订阅Observable之后开始发送事件,当您指定的条件变为false时,TakeWhile操作符将停止Observable发送事件并终止。

示例:

Observable.interval(1, TimeUnit.SECONDS)
	.takeWhile(object :Predicate<Long>{
		override fun test(t: Long): Boolean {
			return t<3
		}
	})
	.subscribe(object : Observer<Long> {
		override fun onSubscribe(d: Disposable) {
			Log.e(TAG, "---------onSubscribe---------")
		}
		override fun onError(e: Throwable) {
			Log.e(TAG, "---------onError---------")
		}
		override fun onNext(t: Long) {
			Log.e(TAG, "---------onNext------$t---")
		}
		override fun onComplete() {
			Log.e(TAG, "---------onComplete---------")
		}
	})

输出结果:

2023-01-11 10:48:25.037 E/ConditionalOperator: ---------onSubscribe---------
2023-01-11 10:48:26.039 E/ConditionalOperator: ---------onNext------0---
2023-01-11 10:48:27.039 E/ConditionalOperator: ---------onNext------1---
2023-01-11 10:48:28.039 E/ConditionalOperator: ---------onNext------2---
2023-01-11 10:48:29.039 E/ConditionalOperator: ---------onComplete---------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值