为什么RxJava2中的distinctUntilChanged()阻止具有不同hashCode的数据?

时间:2018-11-05 13:19:54

标签: rx-java2

我使用distinctUntilChanged()过滤了Observable中的重复发射。 但是它过滤了不同的发射数据。我在map()之前和之后使用了distinctUntilChanged()函数,如下所示,我发现了之前打印的日志。

 ..
 ...
 .map(t -> {
    Timber.d("hashcode: %d", t.hashCode());
    return t;
  })
  .distinctUntilChanged()
  .map(t -> {
    Timber.d("hashcode2: %d", t.hashCode());
    return t;
  })
  .replay(1)
  .autoConnect(0);

打印的日志:

hashcode: -1015116098  
hashcode: -981267991

为什么不使用“ hashcode2”打印任何日志?

1 个答案:

答案 0 :(得分:0)

根据@akarnokd的评论,

  

您有一个可变的数据结构,可以处理先前的数据,或者一次又一次仅发送一个引用,因此该引用始终与自己相等。

他说正确的t是一个可变类,其中保留了一些字段和一个List
我在foreach中更改了“列表”的项目。实际上,我的错误在那里:(,最后,我用索引循环替换了foreach循环,并且问题解决了。

Some Q&A about loop