重写了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;
}