使用rxjava1 android(java)搜索过滤器

使用rxjava1 android(java)搜索过滤器,java,android,rx-java,rx-android,Java,Android,Rx Java,Rx Android,我有一个列表和搜索过滤器。我已经使用了EditText侦听器和for循环。但是我希望过滤器应该由rxjava处理 @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { Log.i(TAG, "Search text: " + charSequence); List<AllAttendance> list = new ArrayList<&g

我有一个列表和搜索过滤器。我已经使用了EditText侦听器和for循环。但是我希望过滤器应该由rxjava处理

@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    Log.i(TAG, "Search text: " + charSequence);
    List<AllAttendance> list = new ArrayList<>();

    //filter from all List

    if (rbtnAll.isChecked())
        list = filter(mAttendanceList, charSequence);
    else if (rbtnPending.isChecked())
        list = filter(mPendingAttendanceList, charSequence);

    setAdapterData(list);
    rvAttendance.scrollToPosition(0);
}

private List<AllAttendance> filter(List<AllAttendance> mAttendanceList, CharSequence charSequence) {

    String text = String.valueOf(charSequence);
    text = text.toLowerCase();

    List<AllAttendance> filteredList = new ArrayList<>();
    for (AllAttendance attendance : mAttendanceList){

        if (attendance.getMandalName().toLowerCase().contains(text) || attendance.getSabhaName().toLowerCase().contains(text) || attendance.getSabhaDate().toLowerCase().contains(text))
            filteredList.add(attendance);
    }
    return filteredList;
}
@覆盖
public void onTextChanged(CharSequence CharSequence,int i,int i1,int i2){
Log.i(标签,“搜索文本:”+charSequence);
列表=新的ArrayList();
//从所有列表中筛选
if(rbtnAll.isChecked())
列表=过滤器(mattendacelist,charSequence);
else if(rbtnPending.isChecked())
列表=过滤器(mPendingAttendanceList,字符序列);
setAdapterData(列表);
rVatenance.scrollToPosition(0);
}
私有列表筛选器(列表MattendAcelist、CharSequence CharSequence){
String text=String.valueOf(charSequence);
text=text.toLowerCase();
List filteredList=新建ArrayList();
for(所有出席人数:Mattendacelist){
if(Attention.getMandalName().toLowerCase().contains(text)| | | Attention.getSabhaName().toLowerCase().contains(text)| | | | Attention.getSabhaDate().toLowerCase().contains(text))
filteredList.add(出席人数);
}
返回过滤器列表;
}

这是我使用AndroidRx进行搜索时使用的一段代码

注意:在本例中,我在等待1000毫秒后对每个字符更改进行网络调用

 PublishSubject<String>  subject = PublishSubject.create();

    subject.debounce(1000, TimeUnit.MILLISECONDS)
            .filter(new Predicate<String>() {
                @Override
                public boolean test(@NonNull String s) throws Exception {
                    return s.length() > 0;
                }
            })
            .switchMap(new Function<String, Observable<SearchViewResponseModel>>() {
                @Override
                public Observable<SearchViewResponseModel> apply(@NonNull String o) throws Exception {
                    return api.getSearchResult(PrefsManager.getToken(SearchActivity.this), o, 0, 10);
                }
            })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeWith(new DisposableObserver<SearchViewResponseModel>() {
                @Override
                public void onNext(@NonNull SearchViewResponseModel s) {
                    adapter.clear();
                    for (SearchViewResponseModel.Data model : s.getData())
                        adapter.add(new SearchViewModel(model.get_id(), model.getThumbnail(), model.getTitle()));
                }

                @Override
                public void onError(@NonNull Throwable e) {
                    e.printStackTrace();
                }

                @Override
                public void onComplete() {
                    Log.i("Completed", "");
                }
            });

    searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(final String newText) {
            subject.onNext(newText);
            return true;
        }
    });

}
PublishSubject=PublishSubject.create();
主题.去盎司(1000,时间单位.毫秒)
.filter(新谓词(){
@凌驾
公共布尔测试(@NonNull字符串s)引发异常{
返回s.length()>0;
}
})
.switchMap(新函数(){
@凌驾
公共可观察应用(@NonNull String o)引发异常{
返回api.getSearchResult(PrefsManager.getToken(SearchActivity.this),o,0,10);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribowith(新可处置观察员){
@凌驾
public void onNext(@NonNull SearchViewResponseModel s){
适配器。清除();
对于(SearchViewResponseModel.Data模型:s.getData())
add(新的SearchViewModel(model.get_id(),model.getThumbnail(),model.getTitle());
}
@凌驾
公共无效onError(@NonNull可丢弃e){
e、 printStackTrace();
}
@凌驾
未完成的公共空间(){
Log.i(“已完成”和“);
}
});
searchView.setOnQueryTextListener(新材料searchView.OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(字符串查询){
返回false;
}
@凌驾
公共布尔onQueryTextChange(最终字符串newText){
subject.onNext(newText);
返回true;
}
});
}