RxJava2 Flowable distinctUnitlChanged (过滤操作符)
distinctUnitlChanged
目录
1 distinctUnitlChanged作用
区分每一个被发出项目与前一个紧邻的项不同,如果相同,就不会被发射,而distinct会丢弃所有相同的重复项,不管是不是紧邻着发射的
2 distinctUnitlChanged接口
Flowable<T> |
distinctUntilChanged()
Returns a Flowable that emits all items emitted by the source Publisher that are distinct from their immediate predecessors based on 返回一个Flowable,它根据Object.equals(Object)比较源Publisher发出的所有项,这些项与前一个项不同。 |
Flowable<T> |
distinctUntilChanged(BiPredicate<? super T,? super T> comparer)
Returns a Flowable that emits all items emitted by the source Publisher that are distinct from their immediate predecessors when compared with each other via the provided comparator function. 返回一个Flowable,它通过提供的比较器函数比较源Publisher发出的所有项目,比较这些项目与其紧邻的前一个项目不同(以此来区分出重复发送) |
<K> Flowable<T> |
distinctUntilChanged(Function<? super T,K> keySelector)
Returns a Flowable that emits all items emitted by the source Publisher that are distinct from their immediate predecessors, according to a key selector function and based on 返回一个Flowable,它根据键选择器函数并基于对键选择器函数返回的那些对象的Object.equals(Object)比较,发出源Publisher发出的与其前一个前驱不同的所有项。 |
3 重点单词
immediate predecessors:直接前辈
predecessors:前辈; 前身; 前任( predecessor的名词复数 ); 前任者(被取代的) 原有事物;
例句:
The government inherited an impossible situation from its predecessors.
这届政府从前任那里接过了一个非常棘手的烂摊子。
4 distinctUnitlChanged图解
下面图解很形象的以颜色进行区分前后两项是否相同,注意不是以形状区分,当然也可以通过形状区分相同,这取决于指定的比较函数
5 distinctUnitlChanged测试用例
@Test
public void distinctUntilChanged() {
System.out.println("######distinctUntilChanged#####");
Flowable.just("item2", "item1", "item2", "item2", "item3").distinctUntilChanged().subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
System.out.println("s:" + s);
}
});
}
######distinctUntilChanged#####
s:item2
s:item1
s:item2
s:item3