Почему DifferentUntilChanged () в RxJava2 предотвращает данные с другим hashCode? - PullRequest
0 голосов
/ 05 ноября 2018

Я использовал 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 голосов
/ 06 ноября 2018

В соответствии с комментарием @akarnokd,

У вас есть изменяемая структура данных, с которой вы манипулируете предыдущими элементами, или вы отправляете только одну ссылку снова и снова, таким образом, она всегда равна себе

Он сказал, что правильно t - это изменяемый класс, который содержит некоторые поля и List.
Я изменил пункт «списка» внутри foreach. На самом деле моя ошибка была там :(, наконец, я заменил цикл foreach на индексированный цикл, и моя проблема решена.

Некоторые вопросы и ответы о петле

...