【发布时间】:2020-10-09 02:36:34
【问题描述】:
我从一个对象获得了两次回调事件,有时三次,但我只需要收集一个将是最新的对象。 RX kotlin 可以吗?
【问题讨论】:
-
你能提供一些你所做的代码吗?
标签: android kotlin rx-java rx-kotlin2
我从一个对象获得了两次回调事件,有时三次,但我只需要收集一个将是最新的对象。 RX kotlin 可以吗?
【问题讨论】:
标签: android kotlin rx-java rx-kotlin2
如果内容不同:
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 多次发射,但您只需要最新的,那么您可以使用 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
}
)
【讨论】: