当我们连接两个可观察的重复项时,是否会在输出流中消除?
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);
}
在 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);
}