带有vararg可观察功能的RxJava拉链

时间:2015-03-10 08:00:22

标签: java reactive-programming rx-java

当我们确切地知道我们有多少可观察物品及其确切类型并且我们想要拉链时,我们会这样做

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来发出...

想象一下几个可观察者发出T我想要拍摄并进行比较,只发出一个可观察的其他观察者......

正如在回答中所说,有一个带有可迭代和函数的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

1 个答案:

答案 0 :(得分:3)

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