gpt4 book ai didi

java - 如果 Maybe 完成,则从其他来源将 Maybe 转换为 Single

转载 作者:IT老高 更新时间:2023-10-28 13:36:05 27 4
gpt4 key购买 nike

我想建立一个 Repository返回 Single<Something> 的类.

该类应首先查看 Cache返回 Maybe<Something>如果 Maybe完成转到我的Service返回 Single<Something>

interface Cache {
fun getSomething(): Maybe<Something>
}

interface Service {
fun getSomething(): Single<Something>
}

class Repository (
private val cache: Cache,
private val service: Service
) {

fun getSomething(): Single<Something> {
return cache.getSomething()
.????(feed.getSomething()) //onCompleteTransformToSingle() or similar
}
}

我已经搜索了 JavaDoc,但似乎不存在适用于这种情况的转换器。

有没有很好的方法来处理这个问题?

最佳答案

您可以使用以下两个相当简单的选项。我发现第一个更明确。第二个好处是您将在缓存中出现任何错误时调用网络。

这些假设从缓存中返回了一个 Maybe。例如,如果缓存中没有找到值,则返回 Maybe.empty()

1) 如果流中有空,switchIfEmpty() 将使用调用网络的备用 observable。如果流中没有空,则永远不会调用网络。

override fun getSomething(): Single<Something> {
return cache.getSomething()
.switchIfEmpty(
Maybe.defer {
feed.getSomething().toMaybe()
}
)
.toSingle()
}

2) 空的可能会在转换为Single()时返回错误,触发网络调用。

override fun getSomething(): Single<Something> {
return cache.getSomething()
.toSingle()
.onErrorResumeNext {
feed.getSomething()
}
}

关于java - 如果 Maybe 完成,则从其他来源将 Maybe 转换为 Single,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47756750/

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