我有一个可观察到的列表(RxJava 1)。
List<Observable> observableList = new ArrayList<>();它可以包含至少1个可观察对象。每一个都有相同类型的结果。
如何才能压缩所有可观测数据的结果?
我想过zip-operator,但它不支持列表,而且我不知道观察值的数量(它可以是1,2,3,4……)
发布于 2017-04-21 01:35:59
您可以使用静态zip(java.lang.Iterable> ws,FuncN zipFunction) method。
它是一个zip方法,它接受Observables的Iterable和FuncN (它接受call方法的varargs参数),并使用它将相应发出的Objects组合成要由新返回的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;
}
});发布于 2018-12-20 21:23:43
ReactiveX - Zip operator
超越BiFunction的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!

发布于 2020-03-27 19:31:58
我也为此而挣扎,并使用Sharan的解决方案作为我的解决方案的基础。
我的用例是对几个第三方提供商进行API调用,然后将每个结果放在一个列表中。列表中的每一项都包含API返回的内容,无论是成功还是失败。
最后,它实际上看起来相当优雅。在我的特定情况下,"ResultType“被替换为类似"ApiGenericResponseObject”的内容。
Observable.zip(listOfObservables, args -> {
List<ResultType> result = new ArrayList<>();
for (Object o: args) {
ResultType c = (ResultType) o;
// additional code here, I am just concatenating them together
// This gives me a list with the individual result of each Observable (for instance an API call)
result.add(c);
}
return result;
});或者,作为Lambda,它看起来更整洁。尽管我想知道读了这篇文章的人是否会理解发生了什么:
Observable.zip(listOfObservables, args -> Arrays.stream(args)
.map(object -> (ResultType) object)
.collect(Collectors.toList())
);希望它能帮上忙!
https://stackoverflow.com/questions/43524709
复制相似问题