有人能解释我这个循环吗?
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。
答案 0 :(得分:2)
您的代码包含副作用:方法更新其上下文之外的对象(此处,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();
}
它应该与你想要达到的目标非常接近。
答案 1 :(得分:0)
@dwursteisen涵盖了你应该避免的副作用,但代码不正确。我认为这将有效。
Observable<List<RateItem>> =
Observable
.from(rates)
.flatMap(r ->
Observable.from(r)
.map(rat ->
new RateItem(rat.getName(),
rat.getCode(),
rat.getValue()));