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);
}

Это действительно просто, но я даже не думал, что это было причиной проблемы.

Спасибо всем.

Другие вопросы по тегам