Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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:发出所有可观察结果中的一个结果,而不是多个_Java_Rx Java - Fatal编程技术网

rxjava:发出所有可观察结果中的一个结果,而不是多个

rxjava:发出所有可观察结果中的一个结果,而不是多个,java,rx-java,Java,Rx Java,这种情况是使用字符串列表参数调用我的getData()方法。对于每个字符串,我都需要在getDataPerItem()中执行一些操作。最后,每次调用getDataPerItem()的结果都应该合并到一个大列表中(保持结果的顺序),getData()应该在一个列表中发出所有结果。使用当前方法,它将分别为每个标识符发出一个列表。如何将所有结果合并为一个 public Observable<List<Model>> getData(List<String> iden

这种情况是使用字符串列表参数调用我的getData()方法。对于每个字符串,我都需要在getDataPerItem()中执行一些操作。最后,每次调用getDataPerItem()的结果都应该合并到一个大列表中(保持结果的顺序),getData()应该在一个列表中发出所有结果。使用当前方法,它将分别为每个标识符发出一个列表。如何将所有结果合并为一个

public Observable<List<Model>> getData(List<String> identifiers) {
    return Observable.from(identifiers).flatMap { identifier -> getDataPerItem(identifier) };
}

public Observable<List<Model>> getDataPerItem(String identifier) {
    return xxx;
}
公共可观察的getData(列表标识符){
返回Observable.from(identifiers).flatMap{identifier->getDataPerItem(identifier)};
}
公共可观测getDataPerItem(字符串标识符){
返回xxx;
}

有几种方法可以实现这一点:

一种解决方案是使用
concatMapIterable
,然后收集列表中的所有内容:

public Single<List<Model>> getData(List<String> identifiers) {
    return Observable
        .from(identifiers)
        .concatMap(identifier -> getDataPerItem(identifier))
        .concatMapIterable(it -> it)
        .toList();
}

请注意,返回类型为
Single
,因为它只发出一项:包含所有内容的列表。

有几种方法可以实现这一点:

一种解决方案是使用
concatMapIterable
,然后收集列表中的所有内容:

public Single<List<Model>> getData(List<String> identifiers) {
    return Observable
        .from(identifiers)
        .concatMap(identifier -> getDataPerItem(identifier))
        .concatMapIterable(it -> it)
        .toList();
}

请注意,返回类型为
Single
,因为它只发出一个项目:包含所有内容的列表。

查看
reduce
:从空列表开始,然后
addAll
从每个部分响应中选择项目。但是如果你被卡住了,请随时更新你的问题!另外,我认为
getDataPerItem
应该只执行一个请求。需要做一些工作的是
getData
中的Rx链:
Observable.from(identifiers).concatMap{identifier->getDataPerItem(identifier)}.reduce(…)
看看
reduce
:从一个空列表开始,然后
addAll
每个部分响应中的项。但是如果你被卡住了,请随时更新你的问题!另外,我认为
getDataPerItem
应该只执行一个请求。需要做一些工作的是
getData
中的Rx链:
Observable.from(identifiers).concatMap{identifier->getDataPerItem(identifier)}.reduce(…)