带有 vararg observables 的 RxJava zip

RxJava zip with vararg observables

当我们确切地知道我们有多少个 observables 以及它们的确切类型并且我们想要压缩时,我们会这样做

Observable<String> data1 = Observable.just("one", "two", "three", "four", "five");
Observable<String> data2 = Observable.just("one", "two", "three", "four", "five");
Observable<String> data3 = Observable.just("one", "two", "three", "four", "five");

Observable.zip(data1, data2, data3, (a, b, c) -> a + b + c);

我们使用带有 3 个参数的固定参数功能接口...在这种情况下它工作正常。

但是如果我们知道我们有 N 个 Observable<T>,其中 T 是同一类型,我们如何压缩它?消费者功能可以是 T...

但我看不出有什么方法可以实现这个...

更新

我在这里试图解决的实际问题是我有一些 Observable<T>,我想 forkJoin 那些,最后只选择一个 T 来发出...

想象一下,有几个 observable 发出 T,我想获取并比较并只发出一个与其他一些 observable...

解决方案

如回答中所述,有一个 zip 包含一个可迭代对象和一个函数,示例代码如下所示

Observable<String> data1 = Observable.just("one", "two", "three", "four", "five");
Observable<String> data2 = Observable.just("one", "two", "three", "four", "five");
Observable<String> data3 = Observable.just("one", "two", "three", "four", "five");
List<Observable<String>> iter = Arrays.asList(data1, data2, data3);

Observable.zip(iter, args1 -> args1).subscribe((arg)->{
  for (Object o : arg) {
    System.out.println(o);
  }
});

这将产生

one
one
one
two
two
two
three
three
three
four
four
four
five
five
five

有一个采用 Iterable 的 zip 方法。这将允许使用 n 个 Observables。