合并操作(Concat)
合并操作(Concat)将两个或多个Observables的发射物按顺序进行合并,不会交错发射。这意味着它将先发射第一个Observable的所有发射物,然后再依次发射第二个Observable的所有发射物,以此类推。
下面通过一个例子来更清晰地理解。
final String[] listFirst = {"A1", "A2", "A3", "A4"};
final String[] listSecond = {"B1", "B2", "B3"};
final Observable<String> observableFirst = Observable.fromArray(listFirst);
final Observable<String> observableSecond = Observable.fromArray(listSecond);
Observable.concat(observableFirst, observableSecond)
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String value) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
由于使用了连接运算符,所以它会保持顺序并按照A1,A2,A3,A4,B1,B2,B3的顺序发出值。
合并
合并通过合并它们的发射将多个Observables合并为一个。在发出项时,它不会保持顺序。
让我们通过一个例子来清楚地理解它。
final String[] listFirst = {"A1", "A2", "A3", "A4"};
final String[] listSecond = {"B1", "B2", "B3"};
final Observable<String> observableFirst = Observable.fromArray(listFirst);
final Observable<String> observableSecond = Observable.fromArray(listSecond);
Observable.merge(observableFirst, observableSecond)
.subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String value) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
由于我们使用了Merge操作符,它不会保持顺序并且可以以任何顺序发出值,例如A1、B1、A2、A3、B2、B3、A4或A1、A2、B1、B2、A3、A4、B3或其他任何顺序。
这就是在RxJava中应根据用例使用Concat和Merge操作符的方式。
merge
=concat
。 - Dave Moten