2017-04-18 8 views
0

In RxJava 2つのオブザーバブルを連結すると、リスト内の重複した項目が削除されます。2つの観測可能な重複アイテムを連結すると、出力ストリームで排除されますか?

例:

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

いいえ、それは重複をフィルタリングしません。最初のテストを見てください。

これは、重複がパイプに挿入されていることを示しています。

第2のテストでは、distinct演算子で重複がフィルタリングされます。しかし、非常に長く持続するObservablesでメモリリークを引き起こす可能性があるので、distinctに注意してください。

@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); 
} 
関連する問題