简体   繁体   English

我应该如何压缩列表 <Observable<T> &gt;成为可观察的 <List<T> &gt;?

[英]How should I zip a List<Observable<T>> into an Observable<List<T>>?

I have a List<Observable<T>> that I would like to transform into an Observable<List<T>> . 我有一个List<Observable<T>> ,我想将其转换为Observable<List<T>>

I am aware of Observable.zip , which seems like the right function, but I'm not sure how to define the zipper parameter. 我知道Observable.zip似乎是正确的功能,但是我不确定如何定义zipper参数。

Here is what I have tried: 这是我尝试过的:

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()));

However, this requires an unchecked cast. 但是,这需要未经检查的演员表。

How should I go about this in RxJava 2? 我应该如何在RxJava 2中解决这个问题?


Note that this question refers to RxJava 1. 请注意, 此问题涉及RxJava 1。

Use the primitives: 使用原语:

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

However, do you really need all the tasks at once? 但是,您真的需要一次完成所有任务吗? You could skip the toList and proccess the tasks as they come; 您可以跳过toList并在任务完成时进行处理。 this will give you both better responsiveness and easier concurrency control. 这将为您提供更好的响应能力和更轻松的并发控制。

Something like this should do 这样的事情应该做

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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM