RxJava2 按顺序发出项目

RxJava2 emit items in order

我正在制作一个汇率应用程序,我有一个屏幕,上面有一个图表,显示了过去 7 天内所选货币的变化。

现在我想要的是按严格的顺序发出物品。

这是我的代码:

public class GraphInteractorImpl implements GraphInteractor {

private final Retrofit retrofit;


@Inject
public GraphInteractorImpl(Retrofit retrofit) {
    this.retrofit = retrofit;
}

@Override
public void downloadData(GraphListener listener) {

    RestAPI api = retrofit.create(RestAPI.class);

    List<String> listDates = getDates();


    for (String date : listDates) {

        Observable<List<ExchangeRate>> observable = api.getExchangeRatesForLast7days(date);


        observable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(
                        listener::onSuccess,
                        listener::onFailure

                );
    }


}


private List<String> getDates() {        //returns last 7 days in a list

    List<String> listDate = new ArrayList<>();

    Calendar calendarToday = Calendar.getInstance();
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
    String today = simpleDateFormat.format(calendarToday.getTime());

    Calendar calendarDayBefore = Calendar.getInstance();
    calendarDayBefore.setTime(calendarDayBefore.getTime());

    int daysCounter = 0;

    while (daysCounter <= 7) {

        if (daysCounter == 0) {  // means that its present day
            listDate.add(today);
        } else {                       // subtracts 1 day after each pass
            calendarDayBefore.add(Calendar.DAY_OF_MONTH, -1);
            Date dateMinusOneDay = calendarDayBefore.getTime();
            String oneDayAgo = simpleDateFormat.format(dateMinusOneDay);

            listDate.add(oneDayAgo);

        }

        daysCounter++;
    }

    return listDate;

}
}

这段代码为我提供了正确的值,但它们没有按顺序排列,所以我在特定日期得到了错误的值。

所以我要做的是同时执行 7 个调用,我猜是使用 zip 运算符,但我还没有为此提出解决方案,因此我们将不胜感激。

API 文档可以在这里找到:http://hnbex.eu/api/v1/

所以我解决这个问题的方法是将所有 7 个可观察对象添加到列表中,然后在该列表中调用 zipIterable()