Android函数响应式编程最新RxJava-操作符入门(1)
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就介绍到这,持续更新中!