我有 N 个单曲源,我想将这些源连接起来并获得最新的成功单曲。例如:
数据库单:
--[A]--|->
API 单一:
---X--->
Single.concat(数据库,API):
--[A]--|->
否则:
数据库单:
--[A]--|->
API 单一:
--[B]--|->
Single.concat(数据库,API):
--[B]--|->
这可能吗?我阅读了文档,但没有找到类似“lastSuccessfullOrError()”方法的内容。我尝试了“elementAt”、“lastOrError”等,但它们的行为不是我想要的
谢谢
最佳答案
这可以通过以下方式实现:
public static <T> Single<T> latestSuccess(Single<T>... sources) {
return Single.defer(() -> {
AtomicReference<T> last = new AtomicReference<T>();
return Observable.fromArray(sources)
.concatMap(source ->
source.doOnSuccess(last::lazySet)
.toObservable()
.onErrorResumeNext(Observable.empty())
)
.ignoreElements()
.andThen(Single.fromCallable(() -> {
if (last.get() == null) {
throw new NoSuchElementException();
}
return last.get();
}));
});
}
关于java - RxJava2 - 来自 concat 的最后一个成功的 Single,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48508391/