RxJava解释了这个循环



谁能解释一下这个循环?

  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(检查)项后,从服务器的响应,然后我想使不同的数组列表从这个列表。为什么这个循环迭代了1000次而不是35次?在这之后,我的新数组列表有1350个元素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();
  }

它应该非常接近你想要达到的效果

@dwursteisen涵盖了应该避免的副作用,但代码不正确。我想这可以。

Observable<List<RateItem>> = 
  Observable
    .from(rates)
    .flatMap(r -> 
       Observable.from(r)
         .map(rat -> 
           new RateItem(rat.getName(),
                        rat.getCode(),
                        rat.getValue()));

相关内容

  • 没有找到相关文章

最新更新