抑制(過濾掉)重復(fù)的數(shù)據(jù)項
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/distinct.c.png" alt="distinct" />
Distinct
的過濾規(guī)則是:只允許還沒有發(fā)射過的數(shù)據(jù)項通過。
在某些實現(xiàn)中,有一些變體允許你調(diào)整判定兩個數(shù)據(jù)不同(distinct
)的標(biāo)準(zhǔn)。還有一些實現(xiàn)只比較一項數(shù)據(jù)和它的直接前驅(qū),因此只會從序列中過濾掉連續(xù)重復(fù)的數(shù)據(jù)。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/distinct.png" alt="distinct" />
RxJava將這個操作符實現(xiàn)為distinct
函數(shù)。
示例代碼
Observable.just(1, 2, 1, 1, 2, 3)
.distinct()
.subscribe(new Subscriber<Integer>() {
@Override
public void onNext(Integer item) {
System.out.println("Next: " + item);
}
@Override
public void onError(Throwable error) {
System.err.println("Error: " + error.getMessage());
}
@Override
public void onCompleted() {
System.out.println("Sequence complete.");
}
});
輸出
Next: 1
Next: 2
Next: 3
Sequence complete.
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/distinct.key.png" alt="distinct" />
這個操作符有一個變體接受一個函數(shù)。這個函數(shù)根據(jù)原始Observable發(fā)射的數(shù)據(jù)項產(chǎn)生一個Key,然后,比較這些Key而不是數(shù)據(jù)本身,來判定兩個數(shù)據(jù)是否是不同的。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/distinctUntilChanged.png" alt="distinctUntilChanged" />
RxJava還是實現(xiàn)了一個distinctUntilChanged
操作符。它只判定一個數(shù)據(jù)和它的直接前驅(qū)是否是不同的。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/distinctUntilChanged.key.png" alt="distinctUntilChanged.key" />
和distinct(Func1)
一樣,根據(jù)一個函數(shù)產(chǎn)生的Key判定兩個相鄰的數(shù)據(jù)項是不是不同的。
distinct
和distinctUntilChanged
默認不在任何特定的調(diào)度器上執(zhí)行。