运行 不同数量的 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) {
}
你可以这样实现:
- 使用
fromArray
运算符将 String.. cities
数组中的每个城市发送到流;
- 使用
flatMapSingle
运算符为每个排放的城市调用您的 API
- 使用
flatMap
和fromIterable
获取WeatherResponse的检索列表并在流中一一发出
- 使用
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
});
}
我有这样的方法
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) {
}
你可以这样实现:
- 使用
fromArray
运算符将String.. cities
数组中的每个城市发送到流; - 使用
flatMapSingle
运算符为每个排放的城市调用您的 API - 使用
flatMap
和fromIterable
获取WeatherResponse的检索列表并在流中一一发出 - 使用
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
});
}