android - 在 rxJava 中压缩超过 9 个 Observable
问题描述
面临需要进行 10-12 次小的并行查询并合并结果的情况。但是如果有一个 zip 方法可以让你最多组合 9 个 Observables,那么如何做更多我不明白。我尝试使用 zip 方法
public static <T, R> Observable<R> zip(Iterable<? extends ObservableSource<? extends T>> sources, Function<? super Object[], ? extends R> zipper)
但有一个错误
java.lang.ClassCastException: java.util.ArrayList cannot be cast to io.reactivex.ObservableSource
尝试看起来像这样
List<Observable> list = new ArrayList<>();
list.add(orderRepository.getOne(54, "id"));
list.add(orderRepository.getTwo(54, "id"));
list.add(orderRepository.getThree(54, "id"));
list.add(orderRepository.getFour(54, "id"));
list.add(orderRepository.getFive());
list.add(orderRepository.getSix(54, "id"));
list.add(orderRepository.getSeven(54, "id"));
list.add(orderRepository.getEight());
list.add(orderRepository.getNine());
list.add(orderRepository.getTen(54, "id"));
list.add(orderRepository.getEleven(54, "id"));
Observable.fromIterable(list);
return Observable.zip(list,
new Function<Object[], OrderModel>() {
@Override
public OrderModel apply(Object[] objects) throws Exception {
Logger.trace("objects = ", objects);
return new OrderModel();
}
});
请举例说明如何在 Java 或 Kotlin 中执行此操作。
解决方案
Observable one = Observable.zip(
orderRepository.getOne(54, "id"),
orderRepository.getTwo(54, "id"),
// Etc up to five (I think)
Function zipper
);
Observable two = Observable.zip(
one, orderRepository.getSix(54, "id"),
orderRepository.getSeven(54, "id"),
// Etc up to five,
Function zipper
);
冲洗并重复,直到你把所有的 observables 压缩在一起。
推荐阅读
- css - 如何找到 CSS 代码的确切位置
- postgresql - 如何将带有点作为千位分隔符的 CSV 文件导入 PostgreSQL
- c# - 将模型传递给 _Layout.cshtml(webapp 版本)
- python - 如何使用气泡图可视化 5-D 混合数据?
- javascript - $.get 不是函数,不推荐使用主线程上的同步 XMLHttpRequest
- r-markdown - R Markdown beamer 演示文稿类似引用
- sql - Oracle SQL 三元运算符或函数?
- javascript - 带有查找的 NodeJS Mongodriver 聚合使不需要的内部连接
- c++ - c++协程连续循环导致堆栈溢出
- mysql - 如何在 MySQL 的约束中检查外键引用的记录的值