Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RxJava:从列表中删除元素_Java_Android_Rx Java_Reactive Programming_Rx Java2 - Fatal编程技术网

RxJava:从列表中删除元素

RxJava:从列表中删除元素,java,android,rx-java,reactive-programming,rx-java2,Java,Android,Rx Java,Reactive Programming,Rx Java2,我使用map,concatMap,all尝试了各种操作符来迭代对象,但我无法从列表中删除元素 下面是一段代码: Observable.fromIterable(selectedJobs) .observeOn(AndroidSchedulers.mainThread()) // Added this from one answer in SO. but still no resolution. .all(homeJob -> {

我使用
map
concatMap
all
尝试了各种操作符来迭代对象,但我无法从列表中删除元素

下面是一段代码:

  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
                }
            });
observeable.fromIterable(selectedJobs)
.observeOn(AndroidSchedulers.mainThread())//从SO中的一个答案中添加了此选项。但仍然没有解决方案。
.all(家庭作业->{
如果(!homeJob.isCanCloseJob()){
selectedJobs.remove(homeJob);//realm.copyToRealmOrUpdate(selectedJobs));
}
@凌驾
公共作废登记员(可丢弃){
e(标记,throwable.getMessage());
//引发的抛出: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`*/)
          );
Observable.fromIterable(元素列表)
.过滤器(滤芯->{
if(element.isValid()){
//使用有效的`element执行一些操作`
//注意:此操作将与每个有效元素一起执行
返回true;
}否则{
//'element'无效,请执行适当的操作
//注意:此操作将针对每个无效元素执行
返回false;
}
})
.toList()//将所有筛选的元素收集到一个列表中
.订阅(
filteredElements->/*使用'filteredElements',它是List*/,
throwable->/*使用此“throwable”*/)执行适当的操作
);

我尝试使用
filter
操作符,但我想要所有过滤对象,这就是您使用
toList()
函数所做的,该函数将在
onSuccess
中返回过滤列表。谢谢我接受这个答案