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

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() {

@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() {

}

});

6a6a405ba111

interval.jpg

(2).range

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

Observable.range(0,10).subscribe(new Observer() {

@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() {

}

});

6a6a405ba111

range.jpg

(3).repeat

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

Observable.range(0,2).repeat(3).subscribe(new Observer() {

@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() {

}

});

6a6a405ba111

repeat.png

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() {

@Override

public String apply(@NonNull String s) throws Exception {

return BASE_URL+s;

}

}).subscribe(new Observer() {

@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() {

}

});

6a6a405ba111

map.png

(2). flatMap与cast

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

List list=new ArrayList<>();

list.add("a1");

list.add("a2");

list.add("a3"); //我要选择的

list.add("a4");

Observable.fromArray(list).flatMap(new Function, ObservableSource>>() {

@Override

public ObservableSource> apply(@NonNull List strings) throws Exception {

return Observable.just(BASE_URL+strings.get(2));

}

}).cast(String.class).subscribe(new Observer() {

@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() {

}

});

6a6a405ba111

flatmap.jpg

(3). flatMapIterable

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

Observable.just(1,2,3).flatMapIterable(new Function>() {

@Override

public Iterable> apply(@NonNull Integer integer) throws Exception {

List list=new ArrayList();

list.add(integer+1);

return list;

}

}).subscribe(new Observer() {

@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() {

}

});

6a6a405ba111

flatmapiterable.jpg

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值