java - 先前完成后添加新订阅

标签 java rx-java reactive-programming

我的 CompositeDisposable 中有 3 个 Disposaple 对象:

 CompositeDisposable disposables = new CompositeDisposable();

 disposables.add(
   interactor1
    .someMethod1()
    .subscribe(...some handling logic));

 disposables.add(
   interactor
    .someMethod2()
    .subscribe(...some handling logic));

 disposables.add(
   interactor
    .someMethod3()
    .subscribe(...some handling logic));

前两个方法返回一些数据并将其传输给其他方法。前两个方法完成后必须调用第三个方法。我该怎么做?

方法签名示例:

 Single<List<String>> someMethod1();
 Single<List<Integer>> someMethod2();
 Single<String> someMethod3();

最佳答案

一个例子胜过千言万语:

public void SO() {
    Single.zip(someMethod1(),
            someMethod2(),
            Pair::create) // (1) create pair from results of someMethod1 and someMethod2
            .flatMap(methodsResultPair -> {
                // (2) handling logic of combined result
                // methodsResultPair.first is result of someMethod1
                // methodsResultPair.second is result of someMethod2
                return someMethod3();
            })
            .subscribe((resultOfMethod3, throwable) -> {
                // process resultOfMethod3
                // process error
            });
}

public Single<List<String>> someMethod1() {
    return Single.just(Collections.<String>emptyList())
            .doOnSuccess(objects -> { /* (3) handling logic of someMethod1 result */ });
}

public Single<List<Integer>> someMethod2() {
    return Single.just(Collections.<Integer>emptyList())
            .doOnSuccess(objects -> { /* (4) handling logic of someMethod2 result */ });
}

public Single<String> someMethod3() {
    return Single.just("");
}

有了这个,你就拥有了一个一次性的而不是三个,因为它们现在都是一个 react 链的一部分。 Single.just() 方法仅用于提供一些虚拟数据。

关于java - 先前完成后添加新订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44247759/

相关文章:

java - 正确处理编码和解码的 URI

java - 如何从 List<Single<List<Int>>> 中收集所有整数并将其放入 RxJava 中的 List<Int> 中?

javascript - 用于稍后提取值的可观察运算符

android - 使用 RX 和 Kotlin 组合网络请求

javascript - 如何让scan()的使用更加清晰

java - 在 RxJava 中什么算作异步边界?

java - 在 Java 中过滤/排序大量数据

java - 无法在sqlite数据库查询(JAVA)中使用输入作为参数

java - 为什么身份映射器会出现内存不足的情况?

android - 在RxJava中使用 "skipWhile"结合 "repeatWhen"实现服务器轮询