【发布时间】:2015-05-11 14:10:26
【问题描述】:
当我们确切知道有多少 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>,我想分叉加入这些并最终只选择了一个T 来发出...
想象几个发出 T 的 observables,我想拿它们比较,然后只发出一个与其他一些 observables...
解决方案
正如回答中所说,有一个带有可迭代和函数的 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
【问题讨论】:
标签: java reactive-programming rx-java