谁能解释一下这个循环?
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()));