抑制(過(guò)濾掉)重復(fù)的數(shù)據(jù)項(xiàng)
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/distinct.c.png" alt="distinct" />
Distinct
的過(guò)濾規(guī)則是:只允許還沒(méi)有發(fā)射過(guò)的數(shù)據(jù)項(xiàng)通過(guò)。
在某些實(shí)現(xiàn)中,有一些變體允許你調(diào)整判定兩個(gè)數(shù)據(jù)不同(distinct
)的標(biāo)準(zhǔn)。還有一些實(shí)現(xiàn)只比較一項(xiàng)數(shù)據(jù)和它的直接前驅(qū),因此只會(huì)從序列中過(guò)濾掉連續(xù)重復(fù)的數(shù)據(jù)。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/distinct.png" alt="distinct" />
RxJava將這個(gè)操作符實(shí)現(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" />
這個(gè)操作符有一個(gè)變體接受一個(gè)函數(shù)。這個(gè)函數(shù)根據(jù)原始Observable發(fā)射的數(shù)據(jù)項(xiàng)產(chǎn)生一個(gè)Key,然后,比較這些Key而不是數(shù)據(jù)本身,來(lái)判定兩個(gè)數(shù)據(jù)是否是不同的。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/distinctUntilChanged.png" alt="distinctUntilChanged" />
RxJava還是實(shí)現(xiàn)了一個(gè)distinctUntilChanged
操作符。它只判定一個(gè)數(shù)據(jù)和它的直接前驅(qū)是否是不同的。
http://wiki.jikexueyuan.com/project/rx-docs/images/operators/distinctUntilChanged.key.png" alt="distinctUntilChanged.key" />
和distinct(Func1)
一樣,根據(jù)一個(gè)函數(shù)產(chǎn)生的Key判定兩個(gè)相鄰的數(shù)據(jù)項(xiàng)是不是不同的。
distinct
和distinctUntilChanged
默認(rèn)不在任何特定的調(diào)度器上執(zhí)行。