过滤操作 - Distinct

优质
小牛编辑
129浏览
2023-12-01

Distinct

抑制(过滤掉)重复的数据项

distinct

Distinct的过滤规则是:只允许还没有发射过的数据项通过。

在某些实现中,有一些变体允许你调整判定两个数据不同(distinct)的标准。还有一些实现只比较一项数据和它的直接前驱,因此只会从序列中过滤掉连续重复的数据。

distinct()

distinct

RxJava将这个操作符实现为distinct函数。

示例代码

  1. Observable.just(1, 2, 1, 1, 2, 3)
  2. .distinct()
  3. .subscribe(new Subscriber<Integer>() {
  4. @Override
  5. public void onNext(Integer item) {
  6. System.out.println("Next: " + item);
  7. }
  8. @Override
  9. public void onError(Throwable error) {
  10. System.err.println("Error: " + error.getMessage());
  11. }
  12. @Override
  13. public void onCompleted() {
  14. System.out.println("Sequence complete.");
  15. }
  16. });

输出

  1. Next: 1
  2. Next: 2
  3. Next: 3
  4. Sequence complete.

distinct(Func1)

distinct

这个操作符有一个变体接受一个函数。这个函数根据原始Observable发射的数据项产生一个Key,然后,比较这些Key而不是数据本身,来判定两个数据是否是不同的。

distinctUntilChanged

distinctUntilChanged

RxJava还是实现了一个distinctUntilChanged操作符。它只判定一个数据和它的直接前驱是否是不同的。

distinctUntilChanged(Func1)

distinctUntilChanged.key

distinct(Func1)一样,根据一个函数产生的Key判定两个相邻的数据项是不是不同的。

distinctdistinctUntilChanged默认不在任何特定的调度器上执行。