我将多个Observable压缩在一起,然后以产生Observable的方式对其进行转换:

final Observable<Observable<M>> result = Observable.zip(obs1, obs2, transformFunc);

我想做的是:
final Observable<M> result = Observable.flatZip(obs1, obs2, transformFunc);

给定flatZip不存在,最干净的方法是什么(也许我应该提交一个)。此刻,我不得不将结果本身拼成平面图。

最佳答案

public class RxHelper {

    public static <T1, T2, R> Observable<R> flatZip(Observable<? extends T1> o1, Observable<? extends T2> o2, final Func2<? super T1, ? super T2, Observable<? extends R>> zipFunction) {
        return Observable.merge(Observable.zip(o1, o2, zipFunction));
    }

    public static <T1, T2, T3, R> Observable<R> flatZip(Observable<? extends T1> o1, Observable<? extends T2> o2, Observable<? extends T3> o3, Func3<? super T1, ? super T2, ? super T3, Observable<? extends R>> zipFunction) {
        return Observable.merge(Observable.zip(o1, o2, o3, zipFunction));
    }

    public static <T1, T2, T3, T4, R> Observable<R> flatZip(Observable<? extends T1> o1, Observable<? extends T2> o2, Observable<? extends T3> o3, Observable<? extends T4> o4, Func4<? super T1, ? super T2, ? super T3, ? super T4, Observable<? extends R>> zipFunction) {
        return Observable.merge(Observable.zip(o1, o2, o3, o4, zipFunction));
    }
}

关于java - RxJava中的flatZip,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23721701/

10-11 07:34