我该如何压缩List <observable <t>&gt;进入一个Observable <list <t>&gt;?

时间:2017-05-24 20:29:44

标签: java rx-java rx-java2

我有List<Observable<T>>我希望转换为Observable<List<T>>

我知道Observable.zip,这似乎是正确的功能,但我不确定如何定义zipper参数。

以下是我的尝试:

final List<Observable<T>> tasks = getTasks();

final Observable<List<T>> task = Observable.zip(
    tasks, 
    x -> ImmutableList.copyOf(x)
        .stream()
        .map(x -> (T)x)
        .collect(ImmutableList.toImmutableList()));

然而,这需要一个未经检查的演员表。

我应该如何在RxJava 2中解决这个问题?

请注意this question是指RxJava 1.

2 个答案:

答案 0 :(得分:1)

使用原语:

List<Observable<T>> tasks = getTasks();
Observable<List<T>> task = Observable.merge(tasks).toList();

但是,你真的一次需要所有任务吗?您可以跳过toList并在任务到来时处理这些任务;这将为您提供更好的响应能力和更容易的并发控制。

答案 1 :(得分:0)

这样的事情应该做

final List<Observable<T>> tasks = getTasks();
List<T> values = getTasks().stream()
                           .map(observable -> observable.firstElement().blockingGet())
                           .collect(Collectors.toList());
Observable<List<T>> result = Observable.fromArray(values);