RxJava的一些标志符号学习(一)

来源:互联网 发布:淘宝商城女棉鞋 编辑:程序博客网 时间:2024/05/20 07:37

Just ,Skip

Just将Object对象逐一输出,skip跳过,subscribeOn表示被观察者运行线程,observeOn表示观察者运行线程,Skip(1)表示跳过第一个Object,

     public void getObservable(){    Observable.just(item,item2)            .subscribeOn(Schedulers.io())            .observeOn(AndroidSchedulers.mainThread())            .skip(1)            .subscribe(new Observer<String[]>() {                @Override                public void onSubscribe(@NonNull Disposable d) {                    Log.i("mao","onSubscribe");                }                @Override                public void onNext(@NonNull String[] s) {                    for(int i=0;i<s.length;i++){                        textview.append(s[i]);                        textview.append("\n");                    }                    Log.i("mao","onNext");                }                @Override                public void onError(@NonNull Throwable e) {                    Log.i("mao","onError");                }                @Override                public void onComplete() {                    Log.i("mao","onComplete");                }            });}

Map

通过自定义函数转化数据,使用onNext方法发送了List数据,通过Map方法将参数T转化为需要参数

   public void getObservable2(){    Observable observabl= Observable.create(new ObservableOnSubscribe<List<AUser>>() {        @Override        public void subscribe(@NonNull ObservableEmitter<List<AUser>> e) throws Exception {            e.onNext(Utils.getAUserList());            e.onComplete();        }    });    Observer<List<User>> observer=new Observer<List<User>>() {        @Override        public void onSubscribe(@NonNull Disposable d) {            Log.i("mao","onSubscribe");        }        @Override        public void onNext(@NonNull List<User> users) {            Log.i("mao","onNext");            for(User use:users){               // textview.append(use.getId());               // textview.append("\n");                textview.append(use.getName());                textview.append("\n");               // textview.append(use.getPsd());            }        }        @Override        public void onError(@NonNull Throwable e) {            Log.i("mao","onError");        }        @Override        public void onComplete() {            Log.i("mao","onComplete");        }    };    observabl.subscribeOn(Schedulers.io())            .observeOn(AndroidSchedulers.mainThread())            .map(new Function<List<AUser>,List<User>>() {                @Override                public List<User> apply(@NonNull List<AUser> aUsers) throws Exception {                    return Utils.getUserList(aUsers);                }            }).subscribe(observer);}

Zip

通过zip函数将多个被观察者Observable 数据进行函数处理,输出给观察者Observer

   public void getObservable3(){    Observable observabl= Observable.create(new ObservableOnSubscribe<List<AUser>>() {        @Override        public void subscribe(@NonNull ObservableEmitter<List<AUser>> e) throws Exception {            e.onNext(Utils.getAUserList());            e.onComplete();        }    });    Observable observab2= Observable.create(new ObservableOnSubscribe<List<AUser>>() {        @Override        public void subscribe(@NonNull ObservableEmitter<List<AUser>> e) throws Exception {            e.onNext(Utils.getAUserList2());            e.onComplete();        }    });    Observer<List<AUser>> observer=new Observer<List<AUser>>() {        @Override        public void onSubscribe(@NonNull Disposable d) {            Log.i("mao","onSubscribe");        }        @Override        public void onNext(@NonNull List<AUser> aUsers) {            for(AUser auser:aUsers){                textview.append(auser.getName());                textview.append("\n");            }            Log.i("mao","onSubscribe");        }        @Override        public void onError(@NonNull Throwable e) {            Log.i("mao","onError");        }        @Override        public void onComplete() {            Log.i("mao","onComplete");        }    };    Observable.zip(observabl, observab2, new BiFunction<List<AUser>,List<AUser>,List<AUser>>() {        @Override        public List<AUser> apply(@NonNull List<AUser> aUsers, @NonNull List<AUser> aUsers2) throws Exception {            return Utils.getZipAUserList(aUsers,aUsers2);        }    }).subscribeOn(Schedulers.io())            .observeOn(AndroidSchedulers.mainThread())            .subscribe(observer);}</php>

CompositeDisposable

Disposable处理每一次的连接,CompositeDisposable用来存储每一次的Disposable,当Activity被销毁时,可以调用CompositeDisposable的clear方法截断所有连接。

        //Disposable,take(count)只发送前几个          public void getObservable4(){    Observable observable=Observable.defer(new Callable<ObservableSource<?>>() {        @Override        public ObservableSource<?> call() throws Exception {            return Observable.just("one","two","three","four");        }    });    DisposableObserver<String> disposableObserver=new DisposableObserver<String>() {        @Override        public void onNext(@NonNull String s) {            textview.append(s);            textview.append("\n");            Log.i("mao","onNext");        }        @Override        public void onError(@NonNull Throwable e) {            Log.i("mao","onError");        }        @Override        public void onComplete() {            textview.append("onComplete");            textview.append("\n");            Log.i("mao","onComplete");        }    };    compositeDisposable.add((Disposable) observable.subscribeOn(Schedulers.io())            .observeOn(AndroidSchedulers.mainThread())            .take(3)            .subscribeWith(disposableObserver));}

Timer


延迟执行任务,注意线程问题

     public void getObservable5(){    Observable.timer(2, TimeUnit.SECONDS,AndroidSchedulers.mainThread()).map(new Function<Long, Long>() {        @Override        public Long apply(@NonNull Long aLong) throws Exception {            return Long.valueOf(6);        }    }).subscribe(new Consumer<Long>() {        @Override        public void accept(Long aLong) throws Exception {            textview.append(aLong+"");            textview.append("\n");        }    });}

interval

interval一下方法表示首次延迟三秒从0开始发送递增数据,之后每两秒发送一次,可以用于app的启动页面
Single发送单条数据,SingleObserver有onSuccess方法代替了onNext方法,与之对用CompletableObserver存在onComplete方法,不存在onNext方法

    public void getObservable6(){    Observable.interval(3,2,TimeUnit.SECONDS,AndroidSchedulers.mainThread())            .subscribe(new Consumer<Long>() {                @Override                public void accept(Long aLong) throws Exception {                    textview.append(aLong+"");                    textview.append("\n");                }            });    Single.just("DY").subscribe(new Consumer<String>() {        @Override        public void accept(String s) throws Exception {            textview.append(s);            textview.append("\n");        }    });    SingleObserver<String> observer=new SingleObserver<String>() {        @Override        public void onSubscribe(@NonNull Disposable d) {        }        @Override        public void onSuccess(@NonNull String s) {        }        @Override        public void onError(@NonNull Throwable e) {        }    };}

Flowable reduce

reduce对Flowable中数据进行处理,发送一个全新的数据

  public void getObservable8(){    Flowable<Integer> flowable=Flowable.just(5,10);    flowable.reduce(10,new BiFunction<Integer, Integer, Integer>() {        @Override        public Integer apply(@NonNull Integer integer, @NonNull Integer integer2) throws Exception {            return integer*integer2;        }    }).subscribe(new Consumer<Integer>() {        @Override        public void accept(Integer integer) throws Exception {            textview.append(integer+"");            textview.append("\n");        }    });

buffer filter

buffer 不太好理解,buffer定期收集Observable的数据放入数据包中,参数分表表示数据的长度,跨度
filter表示过滤,

  public void getObservable9(){    Observable<List<String>> observable=Observable.just("one","two","three","four")            .buffer(3,1);    Observer<List<String>> observer=new Observer<List<String>>() {        @Override        public void onSubscribe(@NonNull Disposable d) {            Log.i("mao","onSubscribe");        }        @Override        public void onNext(@NonNull List<String> strings) {            Log.i("mao","onNext");            textview.append("size="+strings.size());            for(String s:strings){                textview.append(s);                textview.append("\n");            }        }        @Override        public void onError(@NonNull Throwable e) {            Log.i("mao","onError");        }        @Override        public void onComplete() {            Log.i("mao","onComplete");        }    };    observable.filter(new Predicate<List<String>>() {        @Override        public boolean test(@NonNull List<String> strings) throws Exception {            return strings.size()%3==0;        }    }).subscribe(observer);}
原创粉丝点击