Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RxJava-可观测数据的zip列表_Java_Android_Rx Java - Fatal编程技术网

RxJava-可观测数据的zip列表

RxJava-可观测数据的zip列表,java,android,rx-java,Java,Android,Rx Java,我有一个可观察的列表(rxjava1) List observableList=new ArrayList(); 它可以包含至少一个可观察的对象。每个都有相同类型的结果 我怎样才能压缩所有观察到的结果 我考虑过zip操作符,但它不支持列表,我不知道可观察对象的数量(可以是1,2,3,4…)您可以使用静态 它是一种zip方法,它采用可观察的的Iterable和a(为其调用方法采用一个参数),并使用它将相应发出的对象组合到新返回的可观察的将忽略的结果中 例如,你可以做: Observable.zi

我有一个可观察的列表(rxjava1)

List observableList=new ArrayList();
它可以包含至少一个可观察的对象。每个都有相同类型的结果

我怎样才能压缩所有观察到的结果

我考虑过zip操作符,但它不支持列表,我不知道可观察对象的数量(可以是1,2,3,4…)

您可以使用静态

它是一种
zip
方法,它采用
可观察的
Iterable
和a(为其
调用
方法采用一个参数),并使用它将相应发出的
对象
组合到新返回的
可观察的
将忽略的结果中

例如,你可以做:

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 beyond双功能

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
 })
val list=arrayListOf()
Observable.zip(list){args->Arrays.asList(args)}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅({
val响应=它[0]
val imageUrlResponse=imageUrlObject作为imageUrlResponse
添加(imageUrlResponse.imageUrl)}
}, {
val c=它
})
以下订阅的结果是下图。就像我们期望它被压缩在一起一样。您还可以注意到它将所有要压缩的响应返回到一个java.lang.Object[]

注意,我必须键入cast我的数组列表才能访问我的单个对象,因为它属于Any类型


我也在努力解决这个问题,并将Sharan的解决方案作为我的解决方案的基础

我的用例是对几个第三方提供商进行API调用,然后将每个结果放入一个列表中。列表中的每个项目都包含API返回的内容,无论是成功还是失败

最后它实际上看起来相当优雅。在我的具体案例中,“ResultType”被替换为类似“ApiGenericResponseObject”的内容


希望有帮助

有一个zip重载,它接受一个可观察的Iterable和一个FuncN:
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
 })
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;
});
Observable.zip(listOfObservables, args -> Arrays.stream(args)
    .map(object -> (ResultType) object)
    .collect(Collectors.toList())
);