查看原文
其他

Android函数响应式编程最新RxJava-操作符入门(1)

2017-08-25 qzs 安卓干货铺

Android函数响应式编程最新RxJava-基本用法

Rxjava操作符包括创建操作符、变换操作符、过滤操作符、组合操作符、错误处理操作符、辅助操作符、条件操作符等等.
今天介绍一下创建操作符变换操作符

1.创建操作符
上一篇文章介绍了创建操作符 just create from , 还有defer,range,interval,repeat,timer等,下面介绍interval和range,repeat。

(1).interval
创建一个按固定时间发射整数序列 的Observable,也就是计时器,下面的代码表示每隔3s打印一次Log:

 Observable.interval(3, TimeUnit.SECONDS).subscribe(new Observer<Long>() {        @Override        public void onSubscribe(@NonNull Disposable d) {                    }        @Override        public void onNext(@NonNull Long aLong) {                Log.e(TAG,aLong+"");        }        @Override        public void onError(@NonNull Throwable e) {        }        @Override        public void onComplete() {        }    });



(2).range

创建发射指定范围的整数序列的Observable,可以代替for循环,第一个参数为起始值,并且不小于0;第二个参数为终止值,左闭右开。代码如下:

  Observable.range(0,10).subscribe(new Observer<Integer>() {        @Override        public void onSubscribe(@NonNull Disposable d) {        }        @Override        public void onNext(@NonNull Integer integer) {            Log.e(TAG,integer+"");        }        @Override        public void onError(@NonNull Throwable e) {        }        @Override        public void onComplete() {        }    });



(3).repeat
创建一个特定次数重复发射特定数据的Observable,代码如下 :

Observable.range(0,2).repeat(3).subscribe(new Observer<Integer>() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull Integer integer) {    Log.e(TAG,integer+""); } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } });



2.变换操作符

变换操作符作用是对Observable发射的数据按照一定规则做一些变换,把变换完成的数据发射出去。变化操作符有  map,flatmap,concatmap,cast,groupBy,buffer,flatMapIterable等等。下面讲主要讲三个。

(1).map
map操作符,主要指定一个对象,转换成一个新的Observable对象并发射,比如我们总写的BASE_URL,总是在变化,但是后面的网址拼接不变。,这时候可以用map。

final String BASE_URL="https://github.com/javaexception"; Observable.just("/keyboard_Cash").map(new Function<String, String >() { @Override public String apply(@NonNull String s) throws Exception {    return BASE_URL+s; } }).subscribe(new Observer<String>() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull String s) {      Log.e(TAG,s+""); } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } });



(2).  flatMap与cast
flatMap讲发射的数据转换为Observable集合,而cast操作符是将Observable集合转换为指定的类型。

 List<String> list=new ArrayList<>();    list.add("a1");    list.add("a2");    list.add("a3");  //我要选择的    list.add("a4"); Observable.fromArray(list).flatMap(new Function<List<String>, ObservableSource<?>>() { @Override public ObservableSource<?> apply(@NonNull List<String> strings) throws Exception {    return Observable.just(BASE_URL+strings.get(2)); } }).cast(String.class).subscribe(new Observer<String>() { @Override public void onSubscribe(@NonNull Disposable d) { } @Override public void onNext(@NonNull String s) {    Log.e(TAG,s+""); } @Override public void onError(@NonNull Throwable e) { } @Override public void onComplete() { } });



(3).  flatMapIterable

flatMapIterable操作符可以将数据包装成Iterable,zai Iterable中我们就可以对数据进行处理:

  Observable.just(1,2,3).flatMapIterable(new Function<Integer, Iterable<?>>() {        @Override        public Iterable<?> apply(@NonNull Integer integer) throws Exception {            List<Integer> list=new ArrayList<Integer>();            list.add(integer+1);            return list;        }    }).subscribe(new Observer<Object>() {        @Override        public void onSubscribe(@NonNull Disposable d) {        }        @Override        public void onNext(@NonNull Object o) {                       Log.e(TAG,o+"");        }        @Override        public void onError(@NonNull Throwable e) {        }        @Override        public void onComplete() {        }        });



上面给just数据里全部加上1,结果显示全部加1了。

今天的Rxjava就介绍到这,持续更新中!


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存