• 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;
    }
     
     
     
  • 相关阅读:
    java设计模式-代理模式
    java设计模式-适配器模式
    java设计模式-策略模式
    java设计模式-建造者模式
    HTML table 边框双线变单线
    flutter flutter_cupertino_date_picker 时间插件的用法
    flutter TextField 输入框被软键盘挡住的解决方案
    vue 多层组件相互嵌套的时候 数据源更新 dom没更新 彻底清除组件缓存
    elementUI 上传文件图片大小加了限制后 仍然上传了
    elementUI el-date-picker 时间范围设置 固定时间段可选 配置
  • 原文地址:https://www.cnblogs.com/javawxid/p/10895818.html
Copyright © 2020-2023  润新知