Java - список равных возвращает false? - PullRequest
0 голосов
/ 11 октября 2018

У меня есть этот код, который сравнивает, если два списка имеют одинаковые объекты:

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

При отладке у меня такая ситуация:

enter image description here

Как видите, оба списка имеют один и тот же объект с одинаковыми свойствами.

Но код, который сравнивает, если два списка равны, всегда возвращает false.

Iпробовал с методом containsAll (), но по какой-то причине тоже возвращает false.

Что я делаю не так?

1 Ответ

0 голосов
/ 11 октября 2018

Как спросил @DawoodibnKareem, я опубликую решение:

Причина, по которой всегда получается "false" в 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);
}

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

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

...