首页 > 解决方案 > 为什么 RxJava2 中的 distinctUntilChanged() 会阻止具有不同 hashCode 的数据?

问题描述

我曾经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”打印任何日志?

标签: rx-java2

解决方案


根据@akarnokd 的评论,

您有一个可变的数据结构,您可以在其中操作以前的项目,或者一遍又一遍地只发送一个引用,因此它总是等于它自己

他说正确t是一个可变类,它保留一些字段和一个List.
我更改了foreach. 事实上我的错误就在那里:(最后,我用foreach索引循环替换了循环,我的问题解决了。

关于循环的一些问答


推荐阅读