结合Observable的排放

时间:2017-01-28 18:24:06

标签: android rx-java

我是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有关,所以我猜我应该搜索其他的东西来组合排放,但我不知道如何搜索它。

2 个答案:

答案 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);