RxJava:从列表中删除元素

RxJava: remove element from list

我已经尝试使用 mapconcatMapall 来迭代对象的各种运算符,但我无法从列表中删除元素。

这是一段代码:

  Observable.fromIterable(selectedJobs)
            .observeOn(AndroidSchedulers.mainThread()) // Added this from one answer in SO. but still no resolution.
            .all(homeJob -> {

                if (!homeJob.isCanCloseJob()) {
                    selectedJobs.remove(homeJob); // <- this is what causing Exception
                    //toast message
                } else {
                    //do something
                }

                return true;
            })
            .subscribe(new SingleObserver<Boolean>() {
                @Override
                public void onSubscribe(Disposable disposable) {

                }

                @Override
                public void onSuccess(Boolean aBoolean) {

                    baseRealm.executeTransaction(realm -> realm.copyToRealmOrUpdate(selectedJobs));

                }

                @Override
                public void onError(Throwable throwable) {
                    AppLogger.e(tag, throwable.getMessage());
                 // throws Caused by: java.util.ConcurrentModificationException
                }
            });

我只想检查条件,然后从列表中删除对象。

在函数式编程中,您使用的是流。您不必从初始输入中删除项目,而是必须过滤流本身并将过滤后的列表传递给消费者。

看来这就是您要找的:

Observable.fromIterable(listOfElements)
          .filter(element -> {
              if (element.isValid()) {
                  // do some action with valid `element`
                  // NOTE: this action would be performed with each valid element
                  return true;
              } else {
                  // `element` is not valid, perform appropriate action
                  // NOTE: this action would be performed for each invalid element
                  return false;
              }
          })
          .toList() // collect all the filtered elements into a List
          .subscribe(
                  filteredElements -> /* use `filteredElements` which is List<Element> */, 
                  throwable -> /* perform appropriate action with this `throwable`*/)
          );