四种操作格式:
1. distinct()
2. distinct(Func1)
3. distinctUntilChanged()
4. distinctUntilChanged(Func1))
1、distinct()
Distinct的过滤规则是:只允许还没有发射过的数据项通过。
在某些实现中,有一些变体允许你调整判定两个数据不同(distinct)的标准。还有一些实现只比较一项数据和它的直接前驱,因此只会从序列中过滤掉连续重复的数据。
Observable.just(1,2,3,4,5,5,6)
.distinct()
.subscribe(integer -> Log.d("TAG","--->"+integer));
运行结果:
—>1
—>2
—>3
—>4
—>5
—>6
2、distinct(Func1)
这个操作符有一个变体接受一个函数。这个函数根据原始Observable发射的数据项产生一个Key,然后,比较这些Key。如果两个数据的key相同,则只保留最先到达的数据。
Observable.just(1,2,3,true,4,10.0f,false,6.1f).distinct(item -> {
if (item instanceof Integer) {
return "I";
}else if(item instanceof Boolean){
return "B";
}else {
return "F";
}
}
)
.subscribe(
integer-> Log.d("TAG", "distinct:"+integer));
运行结果:
distinct:1
distinct:true
distinct:10.0
3、distinctUntilChanged()
它只判定一个数据和它的直接前驱是否是不同的
Observable.just(1,2,3,2,5,5,6).distinctUntilChanged()
.subscribe(integer -> Log.d("TAG","--->"+integer));
运行结果:
—>1
—>2
—>3
—>2
—>5
—>6
4、distinctUntilChanged(Func1)
跟distinct(Func1)操作类似,但是判定的key是否和前驱重复。
Observable.just(1,2,3,true,4,10.0f,false,6.1f).distinctUntilChanged(
item -> {
if (item instanceof Integer) {
return "I";
}else if(item instanceof Boolean){
return "B";
}else {
return "F";
}
}
)
.subscribe(obj -> Log.d("TAG","--->"+obj));
运行结果:
—>1
—>true
—>4
—>10.0
—>false