RxJava - 可观察的 zip 列表
我有一个可观察量列表(RxJava 1)。
List<Observable> observableList = new ArrayList<>();
它可以包含至少 1 个可观察量。每个都有相同类型的结果。
如何压缩所有可观察量的结果?
我想到了zip运算符,但它不支持List,我不知道可观察量的数量(它可以是1,2,3,4....)
我有一个可观察量列表(RxJava 1)。
List<Observable> observableList = new ArrayList<>();
它可以包含至少 1 个可观察量。每个都有相同类型的结果。
如何压缩所有可观察量的结果?
我想到了zip运算符,但它不支持List,我不知道可观察量的数量(它可以是1,2,3,4....)
你可以使用静态 zip(java.lang.Iterable<? extends Observable<?>> ws,FuncN<? extends R> zipFunction)
方法。
它是一种采用一个s和一个FuncN
(其方法采用varargs参数)的方法,并使用它来将发出的相应s合并到结果中,由新返回的结果省略。zip
Iterable
Observable
call
Object
Observable
例如,您可以执行以下操作:
Observable.zip(observableList, new FuncN(){
public ReturnType call(java.lang.Object... args){
ReturnType result; //to be made
//preparatory code for using the args
for (Object obj : args){
ReturnType retObj = (ReturnType)obj;
//code to use the arg once at a time to combine N of them into one.
}
return result;
}
});
ReactiveX - Zip 运算符
超越双功能的拉链
Zip 通过指定函数将多个可观察量的发射组合在一起,并根据此函数的结果为每个组合发出单个项目
此处,list 是要传递的任何类型的可观察量的数组列表。
val list = arrayListOf<Observable<ImageUrlResponse>>()
Observable.zip(list) { args -> Arrays.asList(args) }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
val response = it[0]
val imageUrlResponse = imageUrlObject as ImageUrlResponse
urls.add(imageUrlResponse.imageUrl)}
}, {
val c = it
})
以下订阅的结果如下图所示。就像我们期望它被压缩在一起一样。你也可以注意到它返回所有要压缩在单个java.lang.Object[]中的响应。
注意 我必须键入强制转换我的数组列表才能访问我的单个对象,因为它的类型为 Any!