2017-04-18 16 views
0

在RxJava当我们连接两个可观察对象时,它是否会消除列表中的重复项目。当我们在输出流中排除两个可观察的重复项时将被排除?

实施例:

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 
    } 
}); 

回答

4

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

它显示重复通过管道。

第二个测试使用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); 
}