有人能解释一下这个循环吗?

  private Observable<ArrayList<RateItem>> generateRates(List<Rates> rates){
    rateItemArrayList = new ArrayList<RateItem>();

    Observable<ArrayList<RateItem>> observable = Observable.from(rates)
            .map(new Func1<Rates, ArrayList<RateItem>>() {
                @Override
                public ArrayList<RateItem> call(Rates r) {
                    for(Rates rat : rates)
                     rateItemArrayList.add(new RateItem(rat.getName(),rat.getCode(),rat.getValue()));
                    return rateItemArrayList;
                }
            });
    return observable;
}

我的列表在服务器响应后有35个(选中)项,然后我想从该列表中创建不同的arraylist。为什么这个循环迭代1000次而不是35次?在那之后,我的新ArrayList有1350项O.O。

最佳答案

您的代码包含一个副作用:一个方法在其上下文之外更新一个对象(这里,map方法在其上下文之外更新一个列表)。
然后当您循环for变量时,您的rates循环非常奇怪,它也用于构建Observable变量。(我认为这是预料不到的)
您的代码可以更简单,使用非副作用代码:

 private Observable<List<RateItem>> generateRates(List<Rates> rates){
      return Observable.from(rates)
                       .map(r -> new RateItem(r.getName(), r.getValue())
                       .toList();
  }

它应该非常接近你想要达到的目标。

09-26 21:03