RxJava为项目列表创建可观察链

RxJava为项目列表创建可观察链,java,android,rx-java,reactive-programming,Java,Android,Rx Java,Reactive Programming,在对列表中的所有项执行webservice调用后,如何返回将发出多个项的observable 因此,我有一个Web服务,它可以保存一辆“汽车”。我从UI中检索一个“汽车”列表,我想单独保存所有这些,但我只想订阅一个可观察的。因此,我基本上希望根据从UI接收到的“汽车”数量,创建某种形式的多个可观察对象链,并且我希望由单个可观察对象发出的Web服务的每个结果。一旦所有的“汽车”都保存在web服务中,单个可观察的可能就完成了。我正在使用RxJava对web服务进行改造,如下所示: 请求: Obser

在对列表中的所有项执行webservice调用后,如何返回将发出多个项的observable


因此,我有一个Web服务,它可以保存一辆“汽车”。我从UI中检索一个“汽车”列表,我想单独保存所有这些,但我只想订阅一个可观察的。因此,我基本上希望根据从UI接收到的“汽车”数量,创建某种形式的多个可观察对象链,并且我希望由单个可观察对象发出的Web服务的每个结果。一旦所有的“汽车”都保存在web服务中,单个可观察的可能就完成了。

我正在使用RxJava对web服务进行改造,如下所示:

请求:

Observable<ResponsePOJO> getCars(Param param);
client.getCars(param)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(Response -> {
                   // Success
                }, e -> {
                    // Error
                });

我正在使用RxJava调用web服务,如下所示:

请求:

Observable<ResponsePOJO> getCars(Param param);
client.getCars(param)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(Response -> {
                   // Success
                }, e -> {
                    // Error
                });

我可能有点误解,但这不只是一个从列表到单个项目的平面映射吗

public Observable<Car> getCars() {
   return api.getCars()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .flatMap(new Func1<List<Car>, Observable<Car>>() {
                @Override public Observable<Car> call(List<Car> carlist) {
                    return Observable.from(carlist);
                }
            });
}
公共可观测的getCars(){
返回api.getCars()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap(新函数1(){
@覆盖公共可观察呼叫(列表carlist){
从(carlist)可观察到的回报;
}
});
}
这样,onNext(Car-Car)将被多次调用,并且每当处理整个列表时,都会调用onCompleted()。在本例中,我使用网络作为列表的源,但我认为这也可以是UI


我希望这就是你想要的,否则,请详细说明,我会和你一起考虑;)

我可能有点误解,但这不正是一个你可以从列表平面映射到单个项目的情况吗

public Observable<Car> getCars() {
   return api.getCars()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .flatMap(new Func1<List<Car>, Observable<Car>>() {
                @Override public Observable<Car> call(List<Car> carlist) {
                    return Observable.from(carlist);
                }
            });
}
公共可观测的getCars(){
返回api.getCars()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap(新函数1(){
@覆盖公共可观察呼叫(列表carlist){
从(carlist)可观察到的回报;
}
});
}
这样,onNext(Car-Car)将被多次调用,并且每当处理整个列表时,都会调用onCompleted()。在本例中,我使用网络作为列表的源,但我认为这也可以是UI


我希望这就是你想要的,否则,请详细说明,我会和你一起考虑;)

我认为您只需要使用Observable.from,如果您需要创建每辆车的Observable,只需使用flatMap操作符即可。 完成后,只需订阅即可

@Test
public void flatMapCars() {
    Observable.from(getCars())
            .flatMap(this::saveCar)
            .subscribe();
}

private List<String> getCars() {
    return Arrays.asList("Aston martin", "Renault", "Seat");
}

private Observable<String> saveCar(String car) {
    return Observable.just(car);//You should save the car
}
@测试
公共车辆{
可观察。从(getCars())
.flatMap(此::saveCar)
.subscribe();
}
私家车名单{
返回数组。asList(“阿斯顿马丁”、“雷诺”、“座椅”);
}
私人可观察储蓄车(串车){
返回可见。只是(车);//你应该救这辆车
}

我认为您只需要使用Observable.from,如果您需要创建每辆车的Observable,只需使用flatMap操作符即可。 完成后,只需订阅即可

@Test
public void flatMapCars() {
    Observable.from(getCars())
            .flatMap(this::saveCar)
            .subscribe();
}

private List<String> getCars() {
    return Arrays.asList("Aston martin", "Renault", "Seat");
}

private Observable<String> saveCar(String car) {
    return Observable.just(car);//You should save the car
}
@测试
公共车辆{
可观察。从(getCars())
.flatMap(此::saveCar)
.subscribe();
}
私家车名单{
返回数组。asList(“阿斯顿马丁”、“雷诺”、“座椅”);
}
私人可观察储蓄车(串车){
返回可见。只是(车);//你应该救这辆车
}

我实际上需要从用户界面对列表中的一定数量的汽车发出Post请求。我实际上需要从用户界面对列表中的一定数量的汽车发出Post请求