康卡特
Concat 发出来自两个或多个可观察量的发射,而不交错它们。它将在发出项时保持可观察量的顺序。这意味着它将发出第一个可观察量的所有项目,然后它将发出第二个可观察对象的所有项目,依此类推。
让我们通过一个例子清楚地理解它。
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() {
}
});
由于我们使用 Concat 运算符,它将保持顺序并将值发出为 A1、A2、A3、A4、B1、B2、B3。
合并
合并 通过将多个可观察量的发射合并为一个。它不会在发出物品时保持订单。
让我们通过一个例子清楚地理解它。
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 Operator,因此它不会保持顺序,并且可以按任何顺序发出值,例如A1,B1,A2,A3,B2,B3,A4或A1,A2,B1,B2,A3,A4,B3或任何东西。
这就是我们应该在RxJava中使用Concat和Merge运算符的方式,具体取决于我们的用例。