我是RxJava
的新手,我想做的是filter()
Array
的所有字符串,以及带有过滤字符串的新数组,以更新我的RecyclerView。
我试过了:
Observable.from(suggestionsArray)
.filter(new Func1<String, Boolean>() {
@Override
public Boolean call(String item) {
return item.contains(usersTextEntered);
}
})
.subscribe(new Action1<String>() {
@Override
public void call(String i) {
adapter.addItem(i);
}
});
adapter.notifyDataSetChanged();
其中suggestionsArray
是我最初的字符串数组,你可以看到我使用filter()
只过滤那些包含特定字符串的字符串,然后更新适配器,但我得到的是ConcurrentModificationException
并且我猜这是因为过滤器中的每个项目都是一个接一个地进行,因此我认为在进入combine
之前我需要subscriber
所有排放物。
我搜索了RxJava
wiki的运营商,但我找到的所有内容(合并/合并/ zip等)都与两个不同的Observables
有关,所以我猜我应该搜索其他的东西来组合排放,但我不知道如何搜索它。
答案 0 :(得分:1)
直到你指定异常来源(即堆栈跟踪)的位置,它只是猜测。但是要回答关于完全加入项目的问题,您可以通过toList()
运营商来完成。它等待onComplete调用,并以List的形式将所有项目作为一个事件发出。
答案 1 :(得分:0)
问题是,ConcurrentModificationException
来自哪里?一个列表?适配器?
如果是后者,您可以始终遵从主线程:
Observable
.from(suggestionsArray)
.filter(item -> item.contains(usersTextEntered))
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(adapter::addItem, err ->{}, adapter::notifyDataSetChanged);