当我们连接两个可观察的重复项时,是否会在输出流中消除?

When we concat two observable Duplicate items will be eliminated in output stream?

在 RxJava 中当我们连接两个 observable 时,它​​会消除列表中的重复项吗?

示例:

Obeseravble.concat(Observable.just(localDataItemList),Observable.just(remoteDataItemList))
.observeOn(Schedulers.computation())
.subcribeOn(AndroidScheulers.mainThread())
.subcribe(new Subscriber<List<Item>>(){
    @Override
    public void onCompleted() {
    }
    @Override 
    public void onError(Throwable e) { 
    } 
    @Override 
    public void onNext(List<Item> concatinatedItemList) { 
        //this will have any duplicated items in case
        //if one item happend to be in the both list before 
    }
});

不,它不会过滤重复项。请看第一个测试

这表明通过管道放置了重复项。

第二个测试使用 distinct 运算符过滤重复项。但是要小心 distinct,因为它可能会导致持久 Observable 的内存泄漏。

@Test
public void duplicates() throws Exception {
    Observable<Integer> just = Observable.just(1, 2, 3);
    Observable<Integer> just1 = Observable.just(2, 3, 4);

    Observable.concat(just, just1).test()
            .assertResult(1, 2, 3, 2, 3, 4);
}

@Test // Filters duplicates
public void duplicatesFilter() throws Exception {
    Observable<Integer> just = Observable.just(1, 2, 3);
    Observable<Integer> just1 = Observable.just(2, 3, 4);

    Observable.concat(just, just1)
            .distinct()
            .test()
            .assertResult(1, 2, 3, 4);
}