gpt4 book ai didi

rx-java - 递归地将Rx单例组合到Observable中

转载 作者:行者123 更新时间:2023-12-02 13:03:20 25 4
gpt4 key购买 nike

假设我有一个称为Singles_0,它可以从t_0类型发出元素T或失败(在某些语言中为Single<T>)。那是:

s_0: -- t_0          // Success

OR

s_0: -- X // Failure
T类型的实例具有 next()方法,该方法也返回 Single类型的可选 T( ,Kotlin 中的 Single<T>?)。此行为导致了一系列的 Single实例能够发出一系列的 T实例,其中每个单个 s_i都可以发出一个元素 t_i,该元素可以返回下一个单独的 s_i+1,后者将发出一个元素 t_i+1,依此类推,直到最后一个元素 t_n-1不返回单曲或任何单曲失败:
s_0: -- t_0

s_1: -- t_1

s_2: -- t_2

...


s_n-1: -- t_n-1

null

OR

s_0: -- t_0

s_1: -- t_1

s_2: -- t_2

...


s_i: -- X

我正在寻找一种 优雅的方式,以便从 Observable类型获取 o T,该功能能够发射链中的所有元素,而当链上没有更多单打时,则由 s_0成功完成;或者如果单打失败,则失败:
o: -- t_0 -- t_1 -- t_2 -- ... -- t_n-1 --o     // Success

OR

o: -- t_0 -- t_1 -- t_2 -- ... --X // Failure

我说的 雅致的很简单(在 Kotlin 中):
// Get single somehow (out of the scope of this question)
val s0: Single<T> = provideSingle()

// Get observable
val o: Observable<T> = s0.chain()

// Define extension method
fun Single<T>.chain(): Observable<T> {
/*
Implement here
*/
}

// Element interface
interface T {
fun next(): Single<T>?
}

这有什么适用性?

在使用带有分页的REST API时可以找到这种情况,其中 Single实例可用于检索单个页面,这反过来又可以提供能够发出后续页面的 Single实例。

最佳答案

我尚未对此进行测试,但基于我前一段时间编写的解决方案,该解决方案针对我翻译为Kotlin的类似分页问题

fun Single<T>.chain(): Observable<T> =
toObservable()
.concatWith {
it.next()?.chain()
?: Observable.empty()
}

获得“递归”链接的关键是 concatWith运算符以递归方式调用 chain方法

关于rx-java - 递归地将Rx单例组合到Observable中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44535765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com