Java-等于列表返回false?

时间:2018-10-10 21:02:41

标签: java list arraylist compare list-comparison

我有这段代码可以比较两个列表是否具有相同的对象:

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。

我尝试了containsAll()方法,但由于某种原因也返回了false。

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

按照@DawoodibnKareem的要求,我将发布解决方案:

之所以在if ( implsNaConfig.equals(implsNoApto) )中始终获得“假”的原因是因为我的CcustoPrestadorOuImplDTO类未实现equals方法。

所以我编辑了类文件,并自动生成了equals方法,它起作用了。

CCustoPrestadorOuImplDTO类中的equals方法:

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

这很简单,但我什至不认为这是问题的根源。

谢谢大家。