运行 不同数量的 observables 顺序

Run different quantity observables sequentially

我有这样的方法

    public void loadData(String city) {
    mWeatherDataSource.getWeatherData(city)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(new DisposableSingleObserver<List<WeatherResponse>>() {
                @Override
                public void onSuccess(List<WeatherResponse> weatherResponses) {
                }
                @Override
                public void onError(Throwable e) {
                }
            });
}

public Single<List<WeatherResponse>> getWeatherData(String city) {
    return mApiService.getDataWeather(city, API_KEY);
}

工作正常,但我希望 loadData 与 String... city(或列表)参数一起工作,该参数运行 getWeatherData 不止一次。

结果必须合并(例如):

@Override
public void onSuccess(List<WeatherResponse> weatherResponses) {
}

你可以这样实现:

  1. 使用 fromArray 运算符将 String.. cities 数组中的每个城市发送到流;
  2. 使用 flatMapSingle 运算符为每个排放的城市调用您的 API
  3. 使用flatMapfromIterable获取WeatherResponse的检索列表并在流中一一发出
  4. 使用 toList 运算符将它们全部分组到一个列表中
    public void loadData(String... cities) {
        Observable.fromArray(cities)
                .flatMapSingle((Function<String, SingleSource<List<WeatherResponse>>>) city -> getWeatherData(city))
                .flatMap((Function<List<WeatherResponse>, ObservableSource<WeatherResponse>>) Observable::fromIterable)
                .toList()
                .subscribe(list -> {
                    // do whatever with your single list with all items
                });
    }