Java - список равных возвращает false?
У меня есть этот код, который сравнивает, если два списка имеют одинаковые объекты:
List<CcustoPrestadorOuImplDTO> implsNaConfig = configImplPermitida.getImplementos();
List<CcustoPrestadorOuImplDTO> implsNoApto = configuracaoImplementoDoApontamento.getImplementos();
Collections.sort(implsNaConfig, Comparator.comparing(o -> o.getCdCcusto()));
Collections.sort(implsNoApto, Comparator.comparing(o -> o.getCdCcusto()));
if ( implsNaConfig.equals(implsNoApto) ){
return true;
}
В отладке у меня такая ситуация:
Как видите, оба списка имеют один и тот же объект с одинаковыми свойствами.
Но код, который сравнивает, равны ли два списка, всегда возвращает false.
Я пытался с помощью метода containsAll(), но по какой-то причине тоже возвращает false.
Что я делаю неправильно?
1 ответ
Как спросил @DawoodibnKareem, я опубликую решение:
Причиной всегда становится "ложным" в if ( implsNaConfig.equals(implsNoApto) )
потому что мой CcustoPrestadorOuImplDTO
класс не имел equals
метод реализован.
Поэтому я отредактировал файл класса и автоматически сгенерировал метод equals, и он сработал.
Метод equals в классе CCustoPrestadorOuImplDTO:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CcustoPrestadorOuImplDTO that = (CcustoPrestadorOuImplDTO) o;
return Objects.equals(cdCcusto, that.cdCcusto) &&
Objects.equals(deCcusto, that.deCcusto) &&
Objects.equals(grupoOperativo, that.grupoOperativo) &&
Objects.equals(deGrupoOperativo, that.deGrupoOperativo);
}
И это метод HashCode():
@Override
public int hashCode() {
return Objects.hash(cdCcusto, deCcusto, grupoOperativo, deGrupoOperativo);
}
Это действительно просто, но я даже не думал, что это было причиной проблемы.
Спасибо всем.