Rxjava学习之过滤操作符 — distinct

时间:2022-10-15 17:50:10

四种操作格式:
1. distinct()
2. distinct(Func1)
3. distinctUntilChanged()
4. distinctUntilChanged(Func1))

1、distinct()

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

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

  Observable.just(1,2,3,4,5,5,6)
        .distinct()
        .subscribe(integer -> Log.d("TAG","--->"+integer));

运行结果:
—>1
—>2
—>3
—>4
—>5
—>6

2、distinct(Func1)

这个操作符有一个变体接受一个函数。这个函数根据原始Observable发射的数据项产生一个Key,然后,比较这些Key。如果两个数据的key相同,则只保留最先到达的数据。

Rxjava学习之过滤操作符 — distinct

 Observable.just(1,2,3,true,4,10.0f,false,6.1f).distinct(item -> {
          if (item instanceof Integer) {
            return "I";
          }else if(item instanceof Boolean){
            return "B";
          }else {
            return "F";
          }
        }
    )
        .subscribe(
       integer-> Log.d("TAG", "distinct:"+integer));

运行结果:
distinct:1
distinct:true
distinct:10.0

3、distinctUntilChanged()

它只判定一个数据和它的直接前驱是否是不同的

Rxjava学习之过滤操作符 — distinct

 Observable.just(1,2,3,2,5,5,6).distinctUntilChanged()
        .subscribe(integer -> Log.d("TAG","--->"+integer));

运行结果:
—>1
—>2
—>3
—>2
—>5
—>6

4、distinctUntilChanged(Func1)

跟distinct(Func1)操作类似,但是判定的key是否和前驱重复。
Rxjava学习之过滤操作符 — distinct

 Observable.just(1,2,3,true,4,10.0f,false,6.1f).distinctUntilChanged(
        item -> {
          if (item instanceof Integer) {
            return "I";
          }else if(item instanceof Boolean){
            return "B";
          }else {
            return "F";
          }
        }
    )
        .subscribe(obj -> Log.d("TAG","--->"+obj));

运行结果:
—>1
—>true
—>4
—>10.0
—>false