我已经尝试使用 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
}
});
我只想检查条件,然后从列表中删除对象。
最佳答案
在函数式编程中,您使用的是流。您不必从初始输入中删除项目,而是必须过滤流本身并将过滤后的列表传递给消费者。
看来这就是您要找的:
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/