В соответствии с this thread conCatMap и карта только отличаются по порядку, в котором исчисляются элементы. Поэтому я сделал тест и создал простой поток целых чисел и хотел посмотреть, в каком порядке они будут испускаться. Я сделал небольшое наблюдение, которое будет принимать цифры в диапазоне от 1 до 5 и несколько их на два. Легко.RxJava - flatmap vs concatMap - почему вы заказываете то же самое по подписке?
Вот код с 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 сохранит порядок?
Не могли бы вы исправить ссылку? Должно ли это быть https://tomstechnicalblog.blogspot.com/2015/11/rxjava-achieving-parallelization.html? –
@ XiaoPeng сделано, спасибо –