Android函數響應式程式設計最新RxJava-基本用法
我的簡書位址
Github位址
Rxjava操作符包括建立操作符、變換操作符、過濾操作符、組合操作符、錯誤處理操作符、輔助操作符、條件操作符等等.
今天介紹一下建立操作符和變換操作符
1.建立操作符
上一篇文章介紹了建立操作符 just create from , 還有defer,range,interval,repeat,timer等,下面介紹interval和range,repeat。
(1).interval
建立一個按固定時間發射整數序列 的Observable,也就是計時器,下面的代碼表示每隔3s列印一次Log:
Observable.interval(, 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(,).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(,).repeat().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());
}
}).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(,,).flatMapIterable(new Function<Integer, Iterable<?>>() {
@Override
public Iterable<?> apply(@NonNull Integer integer) throws Exception {
List<Integer> list=new ArrayList<Integer>();
list.add(integer+);
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就介紹到這,持續更新中!