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/