このスレッドによると、 conCatMap と flatmap はアイテムが発行される順序のみが異なります。そこで、テストを行い、整数の単純なストリームを作成し、それらがどの順序で放出されるかを確認したいと考えました。1 ~ 5 の範囲の数値を取り、それらを 2 倍する小さなオブザーバブルを作成しました。簡単。
フラットマップを使用したコードは次のとおりです。
myObservable.flatMap(new Func1<Integer, Observable<Integer>>() {
@Override
public Observable<Integer> call(Integer integer) {
return Observable.just(integer * 2);
}
}).subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Integer integer) {
Log.v("myapp","from flatMap:"+integer);
}
});
concatMap を使用したまったく同じコード:
myObservable.concatMap(new Func1<Integer, Observable<Integer>>() {
@Override
public Observable<Integer> call(Integer integer) {
return Observable.just(integer * 2);
}
}).subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Integer integer) {
Log.v("myapp","from concatmap:"+integer);
}
});
ログで印刷を見たとき、順序が両方で同じだったのはなぜですか? concatMap だけが順序を保持すると思いましたか?