问题描述
我有时两次从某个对象获取回调事件,但是我只需要收集一个将成为最新对象的对象。 RX kotlin是否可以?
解决方法
如果内容不同:
Observable.create<String> {
it.onNext("One")
it.onNext("Two")
it.onComplete()
}
.lastOrError()
.subscribe { data,error ->
Log.d("Log",data)
}
如果内容相同:
Observable.create<String> {
it.onNext("One")
it.onNext("One")
it.onComplete()
}
.distinctUntilChanged()
.subscribe {
Log.d("Log",it)
}
或将它们组合在一起:
Observable.create<String> {
it.onNext("One")
it.onNext("Two")
it.onNext("Two")
it.onNext("Two")
it.onComplete()
}
.distinctUntilChanged()
.lastOrError()
.subscribe { data,data)
}
,
如果您的观察对象发射多次,但是您只需要最新一次,则可以使用Observable.blockingLast()
来获取该项目,而忽略其余的项目。
类似地,您可以使用Observable.blockingFirst()
来获得第一个结果。
请注意,这两个都会阻塞当前线程。
,Single 的行为与 Observable 相似,除了它只能发出单个成功值或错误(没有像 Observable 那样的“onComplete”通知)。
Single.create<String> {
it.onSuccess("one")
it.onSuccess("two")
it.onSuccess("three")
}.subscribe(
{
// ON Succuess
},{
// on error
}
)