for循环使用后contains方法失去效果

重写了cartInfo中的equals和hashcode方法

第一种方式:
包含是可以的
List<CartInfo> cookie = new ArrayList<CartInfo>();
List<CartInfo> redis = new ArrayList<CartInfo>();
//缓存中实体类
redis.add(new CartInfo(1L,5,new BigDecimal(0.5)));
redis.add(new CartInfo(2L,5,new BigDecimal(0.5)));
//cookie的实体类
cookie.add(new CartInfo(1L,5,new BigDecimal(1.5)));
cookie.add(new CartInfo(3L,5,new BigDecimal(1.5)));
CartInfo cookieCartInfo = new CartInfo(1L,5,new BigDecimal(0.5));
//判断redis中是否包含单个cookie实体类
if (redis.contains(cookieCartInfo)) {
System.out.println(true);
}

第二种方式:
包含是不可以的
List<CartInfo> cookie = new ArrayList<CartInfo>();
List<CartInfo> redis = new ArrayList<CartInfo>();
//缓存中实体类
redis.add(new CartInfo(1L,5,new BigDecimal(0.5)));
redis.add(new CartInfo(2L,5,new BigDecimal(0.5)));
//cookie的实体类
cookie.add(new CartInfo(1L,5,new BigDecimal(1.5)));
cookie.add(new CartInfo(3L,5,new BigDecimal(1.5)));

getCartList(redis,cookie);
 
public List<CartInfo> getCartList(List<CartInfo> redis,List<CartInfo> cookie){
for (CartInfo info : cookie) {
if(redis.contains(info)){
for (CartInfo cartInfo : redis) {//遍历缓存
if(cartInfo.getProductId().equals(info.getProductId())){//判断cookie的产品id和缓存中的产品id是否相等
//合并缓存和cookie的数据
cartInfo.setProductNumber(cartInfo.getProductNumber()+info.getProductNumber());
cartInfo.setProductPrice(cartInfo.getProductPrice().add(info.getProductPrice()));
}
}
}else{
redis.add(info);
}

}
return redis;
}

redis.contains(info)明明包含了info但是实际判断是不包含

区别在于后者进行遍历了

被逼无奈只能添加自定义方法
代替contains
public boolean Acontains(List<CartInfo> redis,CartInfo info){
boolean flag = false;
for (CartInfo redi : redis) {
if(redi.getProductId().equals(info.getProductId())){
return true;
}
}
return flag;
}
 
 
 
原文地址:https://www.cnblogs.com/javawxid/p/10895818.html