根据这个帖子,conCatMap和flatMap的区别仅在于发出项目的顺序不同。 因此,我进行了测试并创建了一个简单的整数流,想要查看它们发出的顺序。 我创建了一个小的observable,它将接受1-5范围内的数字并将它们乘以二。 很容易。
以下是使用flatMap的代码:
以下是使用flatMap的代码:
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会保留顺序?