contains方法在list(实体类)中骚套路

在List集合中放置一个实体类对象如何使用contains类进行比较是否为对象的子集
listDrugAsocDOS.contains(listDrugAsocDO)

在contains源码中发现

public boolean contains(Object o) {
    Iterator<E> it = iterator();
    if (o==null) {
        while (it.hasNext())
            if (it.next()==null)
                return true;
    } else {
        while (it.hasNext())
            if (o.equals(it.next()))
                return true;
    }
    return false;
}

contains方法是底层是使用equals方法进行比较所以,实体类中只要有部分不同就集合不是子集。所以我们想使用部分实体类的部分元素进行比较是否为子集就需要我们去重写实体类的equals的方法。

比如:在mybatis中使用雪花算法进行id的插入,在插入两条相同的数据但是他们的id是不能相同的所以使用这个contains方法就是行不通的

重写equals的技巧(当然也带重写hashCode),将需要比较的字段拼接在string的字符串中进行比较

@Override
public boolean equals(Object o) {
    if (this == o) {
        return true;
    }
    if (o == null || getClass() != o.getClass()) {
        return false;
    }
    ListDrugAsocDO that = (ListDrugAsocDO) o;

 String thisStr = tenditmId + "-" + druglistId + "-" + drugCode;
 String thatStr = that.tenditmId + "-" + that.druglistId + "-" + that.drugCode;

 return thisStr.equals(thatStr);
}

@Override
public int hashCode() {
    return Objects.hash(tenditmId, druglistId, drugCode);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值