我有这个代码来比较两个列表是否有相同的对象:
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。
我做错了什么?
发布于 2018-10-11 05:16:17
正如@DawoodibnKareem问的那样,我将发布解决方案:
之所以在if ( implsNaConfig.equals(implsNoApto) )
its中总是得到"false“,是因为我的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);
}
这真的很简单,但我甚至不认为这是问题的原因。
谢谢大家。
https://stackoverflow.com/questions/52748741
复制相似问题