我从一个对象获得回调事件两次,有时三次,但我只需要收集一个最新的对象。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, error ->
Log.d("Log", 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
}
)