为了账号安全,请及时绑定邮箱和手机立即绑定

Java - 等于列表返回 false?

Java - 等于列表返回 false?

Cats萌萌 2021-11-11 13:31:01
我有这个代码比较两个列表是否具有相同的对象: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 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

正如@DawoodibnKareem 所问,我将发布解决方案:


总是在其中得到“false”的原因是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);

}

这真的很简单,但我什至不认为这是问题的原因。


谢谢大家。


查看完整回答
反对 回复 2021-11-11
  • 1 回答
  • 0 关注
  • 186 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信