我有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.
答案 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);