android - 如果只有一个 Observable 参数存在,如何使用 RxJava Observable.zip

标签 android rx-java reactive-programming observable

H,

抱歉,我是 RxJava 的新手,对如何使用 rx.Observable 有疑问。

这是我的代码

final Observable<SomeData> data1 =
         getData(...);
final Observable<SomeData> data2 =
         getData(...);                    
final Observable<SomeData> data3 =
         getData(...);

            return Observable.zip(
                    data1,
                    data2,
                    data3,
                    new Func3<SomeData, SomeData, SomeData, SomeData>() {
                        @Override
                        public SomeData call(
                                final SomeData d1,
                                final SomeData d2,
                                final SomeData d3) {
                            //do something and return SomeData
                        }
                    });

这里,当所有数据都存在时,我使用 zip。

我的问题是,如果 data2 和 data3 不存在(即它们都为空),我不/不应该使用 Observable.zip 来发出函数并获取返回值,那么我应该怎么做当我只有 data1 时?如果只带一个参数(data1)应该使用哪个API?此外,我将不得不从函数返回 SomeData 而不是 Observable。

任何帮助将不胜感激!

最佳答案

当您只有第一个参数的数据时,您不能真正应用相同的 3 参数函数,但您可以使用标记值告诉函数参数 2 和 3 没有数据:

static final SomeData NOT_PRESENT = new SomeData(null, ...); 

void Observable<OutputType> process(Observable<SomeData> data1,
       Observable<SomeData> data2, Observable<SomeDatat> data3) {
    Func3<SomeData, SomeData, SomeData, OutputType> f3 = (a, b, c) -> {

        if (b == NOT_PRESENT) {
        }
        // process the data and return an OutputType
        return ...
    };

    if (data2 != null && data3 != null) {
        return Observable.zip(data1, data2, data3, f3);
    }

    return data1.map(v -> f3.call(v, NOT_PRESENT, NOT_PRESENT));
}

关于android - 如果只有一个 Observable 参数存在,如何使用 RxJava Observable.zip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40645889/

相关文章:

android - RxJava 在继续之前等待响应被检索

android - RxJava - 何时以及为何使用 Observable.share()

javascript - 如何在 React Js 中设置匹配密码

java - RxJava Observable/Flowable 上的运算符延迟 n 个项目的发射

android - 将字符 "©"插入到我的 json 对象的任何属性中会破坏我的 php 代码

android - 如何在线性布局中获取textview的位置(Y坐标)

android - 文件 'root/lib/META-INF/MANIFEST.MF' 使用保留文件或目录名称 'lib'

Android:JSON 或 XML,缓存

Android RXJava 清理解决方案

android - 等待几个 observable 完成有/没有序列 Retrofit2 with rxjava - Android