java - RxJava解释这个循环

标签 java android rx-java

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

  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 个项目。

最佳答案

您的代码包含一个副作用:方法更新其上下文之外的对象(此处,map方法更新其外部的列表)。

然后,当您循环遍历 rates 变量时,您的 for 循环非常奇怪,该变量也用于构建 Observable 。 (我认为这不是预期的)

使用无副作用代码,您的代码可以更简单:

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

它应该非常接近您想要实现的目标。

关于java - RxJava解释这个循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39621247/

相关文章:

android - 使用 c++static 的 NDK 编译错误

java - 改造 + RxJava : How to request for multiple request in order and assemble results in single Observable?

java - 二维数组仅显示文本函数中的最后一个元素

java - 加载 JNI Dll

android - 在 Android Studio 中创建基于 Phonegap 的 Android 应用

android - Hilt 和 WorkManager 错误 : lateinit property WorkerFactory has not been initialized

java - DisposableObserver 与(常规)观察者

java - Observable#repeat 在响应式扩展中的奇怪行为

java - 矩形碰撞检测系统不起作用

java - ReentrantReadWriteLock挂起