Rxjava基本使用–过滤型操作符
filter
true为全部都发射给下游 false为全部不发射给下游
Observable.just("三鹿","合生元","哈哈")
.filter(object : Predicate<String>{
override fun test(t: String): Boolean {
//true为全部不过滤 false为全部过滤掉
// return true
if ("三鹿".equals(t)){
//将 三鹿 过滤掉
return false
}
return true
}
})
.subscribe(object : Observer<String>{
override fun onComplete() {
}
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: String) {
}
override fun onError(e: Throwable) {
}
})
take
只有在有定时器运行的基础上,加入take过滤操作符
//上游 时间计时 每2秒执行一次
Observable.interval(2,TimeUnit.SECONDS)
//执行到第8次后停止 。。 不加take会无限执行下去
.take(8)
.subscribe(object : Consumer<Long>{
override fun accept(t: Long?) {
Log.e("Take=","cishu=$t")
}
})
distinct
过滤重复事件
Observable.create(object : ObservableOnSubscribe<Int> {
override fun subscribe(emitter: ObservableEmitter<Int>) {
emitter.onNext(1)
emitter.onNext(2)
emitter.onNext(3)
emitter.onNext(4)
emitter.onNext(3)
emitter.onNext(1)
emitter.onNext(2)
}
}).distinct()
.subscribe(object : Consumer<Int>{
override fun accept(t: Int?) {
Log.e("distinct","value=$t")
}
})
elementAt
指定发射事件的内容,如果无法指定,可以设定默认的事件
Observable.create(object : ObservableOnSubscribe<String>{
override fun subscribe(emitter: ObservableEmitter<String>) {
emitter.onNext("11111")
emitter.onNext("2222")
emitter.onNext("33333")
}
})
.elementAt(1,"默认值-111")
.subscribe(object : Consumer<String>{
override fun accept(t: String?) {
Log.e("elementAt","shuju=$t")
}
})