RxJava3 创建型操作符

通过具体的示例,系统学习并记录每个操作符的使用方法~

1. Create ⭐️

创建一个Observable,在Create操作符的闭包中,通过发射器直接调用观察者的onNext、onComplete等回调方法,来完成事件的发送。

示例:

Observable.create(object : ObservableOnSubscribe<Int> {
    override fun subscribe(emitter: ObservableEmitter<Int>) {
        emitter.onNext(1)
        emitter.onNext(2)
        emitter.onNext(3)
        emitter.onComplete()
    }
}).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---------")
    }
})

输出结果:

E/CreateOperator: ---------onSubscribe---------
E/CreateOperator: ---------onNext--------1-
E/CreateOperator: ---------onNext--------2-
E/CreateOperator: ---------onNext--------3-
E/CreateOperator: ---------onComplete---------

2. Defer

Defer操作符提供一个Observable工厂函数,当有观察者订阅它的时候,它会为每个观察者生成一个Observable供观察者订阅。它保证了未被订阅时不会创建Observable,而订阅时Observable包含的数据一定是最新的。

示例:

//定义一个数据源
val source = mutableListOf<Int>(1,2,3)

val defer = Observable.defer { Observable.fromIterable(source); }

defer.subscribe(object : Observer<Any> {

    override fun onSubscribe(d: Disposable) {
        Log.e(TAG, "-----defer1----onSubscribe---------")
    }

    override fun onNext(t: Any) {
        Log.e(TAG, "----defer1-----onNext--------${t}-")
    }

    override fun onError(e: Throwable) {
        Log.e(TAG, "----defer1-----onError---------")
    }

    override fun onComplete() {
        Log.e(TAG, "-----defer1----onComplete---------")
        //往数据源中添加一个数据
        source.add(100)
    }
})

defer.subscribe(object : Observer<Any> {
    override fun onSubscribe(d: Disposable) {
        Log.e(TAG, "-----defer2----onSubscribe---------")
    }

    override fun onNext(t: Any) {
        Log.e(TAG, "----defer2-----onNext--------${t}-")
    }

    override fun onError(e: Throwable) {
        Log.e(TAG, "----defer2-----onError---------")
    }

    override fun onComplete() {
        Log.e(TAG, "-----defer2----onComplete---------")
    }
})

输出结果:

E/CreateOperator: -----defer1----onSubscribe---------
E/CreateOperator: ----defer1-----onNext--------1-
E/CreateOperator: ----defer1-----onNext--------2-
E/CreateOperator: ----defer1-----onNext--------3-
E/CreateOperator: -----defer1----onComplete---------
E/CreateOperator: -----defer2----onSubscribe---------
E/CreateOperator: ----defer2-----onNext--------1-
E/CreateOperator: ----defer2-----onNext--------2-
E/CreateOperator: ----defer2-----onNext--------3-
E/CreateOperator: ----defer2-----onNext--------100-
E/CreateOperator: -----defer2----onComplete---------

3. Empty

创建一个Observable,它不发出任何项,但正常终止。

示例:

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

输出结果:

E/CreateOperator: ---------onSubscribe---------
E/CreateOperator: ---------onComplete---------
E/CreateOperator: ---------doFinally---------

4. Never

创建一个Observable,它不发出任何项,也不终止。

示例:

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

输出结果:

E/CreateOperator: ---------onSubscribe---------

5.Throw

创建一个Observable,它不发出任何项,但以错误终止。

示例:

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

输出结果

E/CreateOperator: ---------onSubscribe---------
E/CreateOperator: ---------onError---------
E/CreateOperator: ---------doFinally---------

6.From ⭐️

将各种对象和数据类型转换为Observable,并依次发送数据源数据。根据不通的数据源调用不同的操作符,即可创建出对应的观察者,主要包括:fromArray、fromCallable、fromFuture、fromIterable、fromPublisher等。

示例(fromArray):

//fromArray
Observable.fromArray(1, "2a", 3)
	.subscribe(object : Observer<Any> {
		override fun onSubscribe(d: Disposable) {
			Log.e(TAG, "---------onSubscribe---------")
		}
		override fun onNext(t: Any) {
			Log.e(TAG, "---------onNext--------${t}-")
		}
		override fun onError(e: Throwable) {
			Log.e(TAG, "---------onError---------")
		}
		override fun onComplete() {
			Log.e(TAG, "---------onComplete---------")
		}
	})

输出结果:

E/CreateOperator: ---------onSubscribe---------
E/CreateOperator: ---------onNext--------1-
E/CreateOperator: ---------onNext--------2a-
E/CreateOperator: ---------onNext--------3-
E/CreateOperator: ---------onComplete---------

示例(fromIterable):

//fromIterable
Observable.fromIterable(arrayListOf(1,"2a",3))
	.subscribe(object : Observer<Any> {
		override fun onSubscribe(d: Disposable) {
			Log.e(TAG, "---------onSubscribe---------")
		}
		override fun onNext(t: Any) {
			Log.e(TAG, "---------onNext--------${t}-")
		}
		override fun onError(e: Throwable) {
			Log.e(TAG, "---------onError---------")
		}
		override fun onComplete() {
			Log.e(TAG, "---------onComplete---------")
		}
	})

输出结果:

E/CreateOperator: ---------onSubscribe---------
E/CreateOperator: ---------onNext--------1-
E/CreateOperator: ---------onNext--------2a-
E/CreateOperator: ---------onNext--------3-
E/CreateOperator: ---------onComplete---------

7.Interval ⭐️

创建一个Observable,它根据给定的时间间隔,发出一个无限序列的递增整数。简单来说就是连续、定时发送。

示例(interval):

//间隔1秒,发送
Observable.interval(1, TimeUnit.SECONDS)
    .take(3)//这里限制发送三次,不限制会一直发送
    .subscribe(object : Observer<Any> {
        override fun onSubscribe(d: Disposable) {
            Log.e(TAG, "---------onSubscribe---------")
        }
        override fun onNext(t: Any) {
            Log.e(TAG, "---------onNext--------${t}----")
        }
        override fun onError(e: Throwable) {
            Log.e(TAG, "---------onError---------")
        }
        override fun onComplete() {
            Log.e(TAG, "---------onComplete---------")
        }
    })

输出结果(这里可以注意日志输出的时间间隔):

2022-10-11 20:53:32.143  E/CreateOperator: ---------onSubscribe---------
2022-10-11 20:53:33.144  E/CreateOperator: ---------onNext--------0----
2022-10-11 20:53:34.144  E/CreateOperator: ---------onNext--------1----
2022-10-11 20:53:35.144  E/CreateOperator: ---------onNext--------2----
2022-10-11 20:53:35.144  E/CreateOperator: ---------onComplete---------

示例(intervalRange):

//start开始累计,count累计多个个数量, 
//initDelay开始等待时间,period 每隔多久执行 TimeUnit 时间单位
Observable.intervalRange(6, 5, 0, 1, TimeUnit.SECONDS)
    .subscribe(object : Observer<Any> {
        override fun onSubscribe(d: Disposable) {
            Log.e(TAG, "---------onSubscribe---------")
        }
        override fun onNext(t: Any) {
            Log.e(TAG, "---------onNext--------${t}-")
        }
        override fun onError(e: Throwable) {
            Log.e(TAG, "---------onError---------")
        }
        override fun onComplete() {
            Log.e(TAG, "---------onComplete---------")
        }
    })

输出结果:

2022-10-11 20:58:53.059 E/CreateOperator: ---------onSubscribe---------
2022-10-11 20:58:53.060 E/CreateOperator: ---------onNext--------6-
2022-10-11 20:58:54.060 E/CreateOperator: ---------onNext--------7-
2022-10-11 20:58:55.060 E/CreateOperator: ---------onNext--------8-
2022-10-11 20:58:56.060 E/CreateOperator: ---------onNext--------9-
2022-10-11 20:58:57.060 E/CreateOperator: ---------onNext--------10-
2022-10-11 20:58:57.060 E/CreateOperator: ---------onComplete---------

8.Just ⭐️

将一个或一组对象转换为发射这些对象的Observable。如果您将null传递给Just,它还是会返回一个Observable,并将null作为一个项发出。

示例:

Observable.just(1, "2", 3)
    .subscribe(object : Observer<Any> {
        override fun onSubscribe(d: Disposable) {
            Log.e(TAG, "---------onSubscribe---------")
        }
        override fun onNext(t: Any) {
            Log.e(TAG, "---------onNext--------${t}-")
        }
        override fun onError(e: Throwable) {
            Log.e(TAG, "---------onError---------")
        }
        override fun onComplete() {
            Log.e(TAG, "---------onComplete---------")
        }
    })

输出结果:

E/CreateOperator: ---------onSubscribe---------
E/CreateOperator: ---------onNext--------1-
E/CreateOperator: ---------onNext--------2-
E/CreateOperator: ---------onNext--------3-
E/CreateOperator: ---------onComplete---------

9.Range

创建一个Observable按顺序发出一系列连续整数,可以指定范围(起始位置和发送多少个)。

示例:

//从10开始,发送5个数
Observable.range(10, 5)
    .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---------")
        }

    })

输出结果:

E/CreateOperator: ---------onSubscribe---------
E/CreateOperator: ---------onNext--------10-
E/CreateOperator: ---------onNext--------11-
E/CreateOperator: ---------onNext--------12-
E/CreateOperator: ---------onNext--------13-
E/CreateOperator: ---------onNext--------14-
E/CreateOperator: ---------onComplete---------

10.Repeat

根据指定的重复次数,重复发送项目。

示例:

Observable.just(1, 2, 3)
    .repeat(2)
    .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---------")
        }

    })

输出结果:

E/CreateOperator: ---------onSubscribe---------
E/CreateOperator: ---------onNext--------1-
E/CreateOperator: ---------onNext--------2-
E/CreateOperator: ---------onNext--------3-
E/CreateOperator: ---------onNext--------1-
E/CreateOperator: ---------onNext--------2-

E/CreateOperator: ---------onNext--------3-
E/CreateOperator: ---------onComplete---------

11.Timer ⭐️

创建一个Observable,它在指定的时间跨度后发出一个特定项目。

示例:

Observable.timer(3, TimeUnit.SECONDS)
    .subscribe(object : Observer<Any> {
        override fun onSubscribe(d: Disposable) {
            Log.e(TAG, "---------onSubscribe---------")
        }

        override fun onNext(t: Any) {
            Log.e(TAG, "---------onNext--------${t}-")
        }

        override fun onError(e: Throwable) {
            Log.e(TAG, "---------onError---------")
        }

        override fun onComplete() {
            Log.e(TAG, "---------onComplete---------")
        }

    })

输出结果:

2022-10-11 21:11:50.219 E/CreateOperator: ---------onSubscribe---------
2022-10-11 21:11:53.220 E/CreateOperator: ---------onNext--------0-
2022-10-11 21:11:53.221 E/CreateOperator: ---------onComplete---------


官方链接:

ReactiveX - Operatorshttps://reactivex.io/documentation/operators.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值