Java - 等于列表返回 false?
Java - Equals list returning 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;
}
我在debug中遇到这样的情况:
如您所见,两个列表都有相同的对象和相同的属性。
但是比较两个列表是否相等的代码总是返回 false。
我尝试使用 containsAll() 方法,但出于某种原因 returns 也是错误的。
我做错了什么?
正如@DawoodibnKareem 所问,我将post 解决方案:
总是在 if ( implsNaConfig.equals(implsNoApto) )
中得到 "false" 的原因是我的 CcustoPrestadorOuImplDTO
class 没有实现 equals
方法。
所以我编辑了 class 文件并自动生成了 equals 方法并且它起作用了。
CCustoPrestadorOuImplDTO中的equals方法class:
@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);
}
真的很简单,但我什至没有想到这是问题的原因。
谢谢大家
我有这段代码可以比较两个列表是否具有相同的对象:
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;
}
我在debug中遇到这样的情况:
如您所见,两个列表都有相同的对象和相同的属性。
但是比较两个列表是否相等的代码总是返回 false。
我尝试使用 containsAll() 方法,但出于某种原因 returns 也是错误的。
我做错了什么?
正如@DawoodibnKareem 所问,我将post 解决方案:
总是在 if ( implsNaConfig.equals(implsNoApto) )
中得到 "false" 的原因是我的 CcustoPrestadorOuImplDTO
class 没有实现 equals
方法。
所以我编辑了 class 文件并自动生成了 equals 方法并且它起作用了。
CCustoPrestadorOuImplDTO中的equals方法class:
@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);
}
真的很简单,但我什至没有想到这是问题的原因。
谢谢大家