RxJava2 Flowable distinctUnitlChanged (过滤操作符)

distinctUnitlChanged

目录

1 distinctUnitlChanged作用

2 distinctUnitlChanged接口

3 重点单词

4 distinctUnitlChanged图解

5 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 Object.equals(Object) comparison.

返回一个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 Object.equals(Object) comparison of those objects returned by the key selector function.

返回一个Flowable,它根据键选择器函数并基于对键选择器函数返回的那些对象的Object.equals(Object)比较,发出源Publisher发出的与其前一个前驱不同的所有项。

3 重点单词

immediate predecessors:直接前辈

predecessors:前辈; 前身; 前任( predecessor的名词复数 ); 前任者(被取代的) 原有事物;

例句:
The government inherited an impossible situation from its predecessors.

这届政府从前任那里接过了一个非常棘手的烂摊子。

 


4 distinctUnitlChanged图解

下面图解很形象的以颜色进行区分前后两项是否相同,注意不是以形状区分,当然也可以通过形状区分相同,这取决于指定的比较函数

RxJava2 Flowable 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