0

我从一个对象获得了两次回调事件,有时三次,但我只需要收集一个将是最新的对象。RX kotlin 可以吗?

4

3 回答 3

1

如果内容不同

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)
}
于 2020-10-14T05:18:39.033 回答
0

Single 的行为与 Observable 类似,只是它只能发出一个成功的值或一个错误(没有像 Observable 那样的“onComplete”通知)。

        Single.create<String> {
            it.onSuccess("one")
            it.onSuccess("two")
            it.onSuccess("three")
        }.subscribe(
            {
//            ON Succuess
            },
            {
// on error
            }
        )
于 2021-04-26T10:15:27.457 回答
0

如果您的 observable 多次发射,但您只需要最新的一个,那么您可以使用Observable.blockingLast()该项目来获取该项目并忽略其余部分。

同样,您可以让用户Observable.blockingFirst()只获得第一个结果。

请注意,这两个都会阻塞当前线程。

于 2020-10-14T05:06:49.897 回答