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