Rxjava2的操作符FilterDebounce DistinctUntilChanged SwitchMap 的使用

Posted yongfengnice

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rxjava2的操作符FilterDebounce DistinctUntilChanged SwitchMap 的使用相关的知识,希望对你有一定的参考价值。

public class RxSearchObservable {
    public static Observable<String> fromView(SearchView searchView) {
        final PublishSubject<String> subject = PublishSubject.create();
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String s) {
                subject.onComplete();
                return true;
            }
            @Override
            public boolean onQueryTextChange(String text) {
                subject.onNext(text);
                return true;
            }
        });
        return subject;
    }
}
RxSearchObservable.fromView(searchView)
                .debounce(300, TimeUnit.MILLISECONDS)  //时间跨度300毫秒以上才触发
                .filter(new Predicate<String>() {    //过滤,下面的test是过滤条件
                    @Override
                    public boolean test(String text) throws Exception {
                        if (text.isEmpty()) {
                            return false;
                        } else {
                            return true;
                        }
                    }
                })
                .distinctUntilChanged()        //去重,比如一开始是abc,用户在300毫秒内删除c再输入c,300毫秒后也不会重新再次触发。
                .switchMap(new Function<String, ObservableSource<String>>() {  //只取最新的结果,比如请求ab很久了还没回来又请求了abc,只取最后的abc的结果。
                    @Override
                    public ObservableSource<String> apply(String query) throws Exception {
                        return dataFromNetwork(query);
                    }
                })
                .subscribeOn(Schedulers.io())  //io耗时操作子线程
                .observeOn(androidSchedulers.mainThread())  //ui更新线程
                .subscribe(new Consumer<String>() {
                    @Override
                    public void accept(String result) throws Exception {
                        textViewResult.setText(result);
                    }
                });

 


以上是关于Rxjava2的操作符FilterDebounce DistinctUntilChanged SwitchMap 的使用的主要内容,如果未能解决你的问题,请参考以下文章

Rxjava2 Observable的辅助操作详解及实例

关于RxJava2 0你不知道的事

Rxjava2 Observable的条件操作符详解及实例

Rxjava2 Observable的辅助操作详解及实例

Rxjava2 Observable的布尔操作符详解及实例

RxJava2.0中flatMap操作符用法和源码分析