RXJava学習ノート(2)
10037 ワード
へんかんさぎょう
前編の学習を通して、私たちはどのようにObservableオブジェクトを作成するかを知っていて、subscribeを通じてイベントをObserverに渡しますが、これらだけでは足りないことを知っていて、いくつかの複雑なシーンがあって、Observableに対していくつかの変換を行ってデータを送信する必要があります.では、この文章で系統的に勉強しましょう.
Observable.from(email).buffer(3).subscribe(
new Action1>() {
@Overridepublic void call(List strings) {
for (int i=0;i
実行結果
com.renyu.rxdemo D/SampleTransformingActiv: strings:email1
com.renyu.rxdemo D/SampleTransformingActiv: strings:email2
com.renyu.rxdemo D/SampleTransformingActiv: strings:email3
com.renyu.rxdemo D/SampleTransformingActiv: ==========================
com.renyu.rxdemo D/SampleTransformingActiv: strings:email4
com.renyu.rxdemo D/SampleTransformingActiv: strings:email5
com.renyu.rxdemo D/SampleTransformingActiv: strings:email6
com.renyu.rxdemo D/SampleTransformingActiv: ==========================
com.renyu.rxdemo D/SampleTransformingActiv: strings:email7
com.renyu.rxdemo D/SampleTransformingActiv: strings:email8
com.renyu.rxdemo D/SampleTransformingActiv: strings:email9
com.renyu.rxdemo D/SampleTransformingActiv: ==========================
com.renyu.rxdemo D/SampleTransformingActiv: strings:email10
com.renyu.rxdemo D/SampleTransformingActiv: ==========================
bufferは
,
であり,本例ではキャッシュ3個毎に放出して2つのパラメータを見る方法である.Observable.from(email).buffer(3, 5).subscribe(
new Action1>() {
@Override public void call(List strings) {
for (int i=0;i
実行結果
com.renyu.rxdemo D/SampleTransformingActiv: strings:email1
com.renyu.rxdemo D/SampleTransformingActiv: strings:email2
com.renyu.rxdemo D/SampleTransformingActiv: strings:email3
com.renyu.rxdemo D/SampleTransformingActiv: ===========
com.renyu.rxdemo D/SampleTransformingActiv: strings:email6
com.renyu.rxdemo D/SampleTransformingActiv: strings:email7
com.renyu.rxdemo D/SampleTransformingActiv: strings:email8
com.renyu.rxdemo D/SampleTransformingActiv: ===========
buffer(count,
subscription=Observable.create(
new Observable.OnSubscribe() { @Override public void call(Subscriber super String> subscriber) {
if (!subscriber.isUnsubscribed()) {
for (int i=0;i>() {
@Override public void call(List strings) {
for (int i=0;i
実行結果
02-15 17:15:22.935 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email1
02-15 17:15:22.935 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email2
02-15 17:15:22.935 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email3
02-15 17:15:22.935 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email4
02-15 17:15:22.945 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: ===========
02-15 17:15:24.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email5
02-15 17:15:24.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email6
02-15 17:15:24.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email7
02-15 17:15:24.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email8
02-15 17:15:24.935 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: ===========
02-15 17:15:26.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email9
02-15 17:15:26.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: strings:email10
02-15 17:15:26.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: ===========
02-15 17:15:28.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: ===========
02-15 17:15:30.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: ===========
02-15 17:15:32.925 14127-14156/com.renyu.rxdemo D/SampleTransformingActiv: ===========
観察時間に注意してください.こちらは2秒ごとに操作を行います.
Observable.just("1", "2", "3", "4", "5", "6").flatMap(
new Func1>() {
@Override public Observable call(String s) {
return Observable.just(s+"2");
}
}).subscribe(new Action1() {
@Override public void call(String s) {
Log.d("SampleTransformingActiv", s);
}
});
実行結果
com.renyu.rxdemo D/SampleTransformingActiv: 12
com.renyu.rxdemo D/SampleTransformingActiv: 22
com.renyu.rxdemo D/SampleTransformingActiv: 32
com.renyu.rxdemo D/SampleTransformingActiv: 42
com.renyu.rxdemo D/SampleTransformingActiv: 52
com.renyu.rxdemo D/SampleTransformingActiv: 62
flatMapは
, Observable , , , concatMap
ですObservable.just(10, 20, 30).switchMap(
new Func1>() {
@Override public Observable call(Integer integer) {
//10 1000 、20 30 50
int delay = 1000;
if (integer>10) { delay=50; }
return Observable.just(integer).delay(delay, TimeUnit.MILLISECONDS);
}
}).subscribe(new Action1() {
@Override public void call(Integer integer) {
Log.d("SampleTransformingActiv", "integer:" + integer);
}
});
実行結果
com.renyu.rxdemo D/SampleTransformingActiv: integer:30
switchmapの機能はflatMapと同様であり、いずれもObservableを変換するものであるが、
switchmap Observable , Observable
と区別されるため、本例は前のflatmapのように3つの結果を生じるのではなく、直接最後のObservableが前の2つに取って代わった.Observable.just("1", "2", "3", "4", "5", "6").groupBy(
new Func1() {
@Override public Boolean call(String s) {
return Integer.parseInt(s)>3;
}
}).subscribe(new Action1>() {
@Override public void call(final GroupedObservable booleanStringGroupedObservable) {
booleanStringGroupedObservable.subscribe(new Action1() {
@Override public void call(String s) {
Log.d("SampleTransformingActiv", booleanStringGroupedObservable.getKey() + " " + s);
}
});
}});
実行結果
com.renyu.rxdemo D/SampleTransformingActiv: false 1
com.renyu.rxdemo D/SampleTransformingActiv: false 2
com.renyu.rxdemo D/SampleTransformingActiv: false 3
com.renyu.rxdemo D/SampleTransformingActiv: true 4
com.renyu.rxdemo D/SampleTransformingActiv: true 5
com.renyu.rxdemo D/SampleTransformingActiv: true 6
groupByは
key ,
Observable.just("1", "2", "3", "4", "5", "6").map(
new Func1() {
@Override public Integer call(String s) {
return Integer.parseInt(s);
}
}).subscribe(new Action1() {
@Override public void call(Integer integer) {
Log.d("SampleTransformingActiv", "integer:" + integer);
}
});
実行結果
com.renyu.rxdemo D/SampleTransformingActiv: integer:1
com.renyu.rxdemo D/SampleTransformingActiv: integer:2
com.renyu.rxdemo D/SampleTransformingActiv: integer:3
com.renyu.rxdemo D/SampleTransformingActiv: integer:4
com.renyu.rxdemo D/SampleTransformingActiv: integer:5
com.renyu.rxdemo D/SampleTransformingActiv: integer:6
mapとflatmapは機能的に一致し、違いは
flatmap Observable , map
である.Observable.just("1", "2", "3", "4", "5", "6").cast(String.class).subscribe(
new Action1() { @Override public void call(String integer) {
Log.d("SampleTransformingActiv", "integer:" + integer);
}
});
実行結果
com.renyu.rxdemo D/SampleTransformingActiv: integer:1
com.renyu.rxdemo D/SampleTransformingActiv: integer:2
com.renyu.rxdemo D/SampleTransformingActiv: integer:3
com.renyu.rxdemo D/SampleTransformingActiv: integer:4
com.renyu.rxdemo D/SampleTransformingActiv: integer:5
com.renyu.rxdemo D/SampleTransformingActiv: integer:6
cast直接
用Observable.just(1, 2, 3, 4, 5, 6).scan(new Func2() {
@Override public Integer call(Integer integer, Integer integer2) {
return integer+integer2;
}
}).subscribe(new Action1() {
@Override public void call(Integer integer) {
Log.d("SampleTransformingActiv", "integer:" + integer);
}
});
実行結果
com.renyu.rxdemo D/SampleTransformingActiv: integer:1
com.renyu.rxdemo D/SampleTransformingActiv: integer:3
com.renyu.rxdemo D/SampleTransformingActiv: integer:6
com.renyu.rxdemo D/SampleTransformingActiv: integer:10
com.renyu.rxdemo D/SampleTransformingActiv: integer:15
com.renyu.rxdemo D/SampleTransformingActiv: integer:21
scan
, ,
Buffer , Observable, Buffer list
、ここでは