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
中返回过滤列表。谢谢我接受这个答案