java - RxJava : remove element from list

标签 java android rx-java reactive-programming rx-java2

我已经尝试使用 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`*/)
          );

关于java - RxJava : remove element from list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47406114/

相关文章:

java - 如何制作全屏java小程序?

Java:如何将两个事件放在同一个方法中

android - 在 WebView 中打开文件大小超过 1MB 的 PDF

android - 在 Android Studio 上导入模块

java - 使用 RX Java Operators 设计 API 流程

android - RxJava Observable 从不执行 onCompleted

java - Mac 上的 Java 未检测到 Tab 键

java.io.NotSerializableException : sun. 打印.Win32PrintService

android - 如何在 Facebook 中添加我的 Android 应用程序

java - RxJava : difference between doOnNext and doOnEach