2017-04-20 65 views
3

我有一个Observable列表(RxJava 1)。RxJava - Observable的zip列表

List<Observable> observableList = new ArrayList<>(); 

它可以包含至少1个Observable。每个都有相同的结果类型。

我该如何压缩所有Observables的结果?

我想到了拉链的运营商,但它不支持列表,我不知道可观的数量(也可以是1,2,3,4 ......)

+0

有一个拉链重载需要观察量的可迭代和FuncN:http://reactivex.io/RxJava/1.x/javadoc/rx/ Observable.html#拉链(java.lang.Iterable,%20rx.functions.FuncN) – akarnokd

回答

5

可以使用静态zip(java.lang.Iterable<? extends Observable<?>> ws,FuncN<? extends R> zipFunction) method

据被新的返回被省略一个zip方法,该方法的Observable秒的IterableFuncN(这需要一个varargs参数为其call方法),并使用它来相应发射Object小号结合到结果Observable

因此,举例来说,你可以这样做:

Observable.zip(observableList, new FuncN(){ 
    public ReturnType call(java.lang.Object... args){ 
     ReturnType result; //to be made 
     //preparatory code for using the args 
     for (Object obj : args){ 
      ReturnType retObj = (ReturnType)obj; 
      //code to use the arg once at a time to combine N of them into one. 
     } 
     return result; 
    } 
});