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

for循环使用后contains方法失去效果的更多相关文章

  1. Java ArrayList正确循环添加删除元素方法及分析

    在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 一.foreach循环 foreach循环(Foreach loop)是计算机编程 ...

  2. 永远不要在循环之外调用wait方法

    1. 前言 随着摩尔定律的失效,Amdahl定律成为了多核计算机性能发展的指导.对于现在的java程序员们来说,并发编程越来越重要和习以为常.很惭愧和恐慌的是我对java的并发编程一直是只知道概念,入 ...

  3. Axure实现提示文本单击显示后自动消失的效果

    Axure实现提示文本单击显示后自动消失的效果 方法/步骤     如图所示,框出的部分为提示文本(已经命名为tooltip),希望达到的效果是默认加载时不显示,点击帮助图标后显示,且2秒后自动消失. ...

  4. for循环与内置方法详解

    ''' for循环与内置方法详解 ''' # 循环:重复(按照某种规律的)做一件事情 # lt = [1, 2, 3, 4] # # ind = 0 # # while True: # print(l ...

  5. JS中For循环中嵌套setTimeout()方法的执行顺序

    在For循环中执行setTimeOut()方法的代码,执行顺序是怎样的呢? 代码如下 function time() { for(var i= 0;i<5;i++){ setTimeout(fu ...

  6. python-turtle-画雪花-2种方法及效果的详解

    1.方法一: 代码: #python3.8 #xuguojun #2020.1.30 #导出模块 import turtle as t import random as r #定义画雪 def dra ...

  7. 学好Spark/Kafka必须要掌握的Scala技术点(一)变量、表达式、循环、Option、方法和函数,数组、映射、元组、集合

    前言 Scala是以JVM为运行环境的面向对象的函数式编程语言,它可以直接访问Java类库并且与Java框架进行交互操作.正如之前所介绍,Spark是用Scala语言编写的,Kafka server端 ...

  8. 零基础学习java------day5------do....while循环、嵌套、方法(函数)

    1  do...while循环 格式 初始化语句; do { 循环体语句; 控制条件语句; }while(判断条件语句); 流程: 先执行初始化语句 再执行循环体语句 再执行条件控制语句 再做条件的判 ...

  9. System.Configuration引用后ConfigurationManager方法用不了

    System.Configuration引用后ConfigurationManager方法却用不了,提示没有引用 需手动添加引用 项目-引用-右击-添加引用-找到System.Configuratio ...

随机推荐

  1. JS选中和取消选中checkbox

    document.getElementsByTagName("input")[0].checked = 0;//不选择 document.getElementsByTagName( ...

  2. CEC、ARC功能介绍

    众所周知,HDMI作为一个数字化视频音频的接收标准,是可以同时传输视频和音频的,当然随着HDMI版本的提升,它的功能也一直在增强.事实上HDMI升级到1.3时,人们就发现了HDMI多了一个CEC功能. ...

  3. jquery的ajax设置为同步

    在使用$.get或者$.post的时候,前面加上 $.ajaxSettings.async = false; 使用完之后再设置为异步 $.ajaxSettings.async = true; 而在使用 ...

  4. [转帖]CentOS 8 都发布了,你还不会用 nftables?

    CentOS 8 都发布了,你还不会用 nftables? https://www.cnblogs.com/ryanyangcs/p/11611730.html 改天学习一下 原文链接:CentOS ...

  5. 《Mysql 索引 - 概述》

    一:索引的目的 - 索引的出现其实就是为了提高数据查询的效率,就像书的目录一样. 二:InnoDB 索引模型 - InnoDB 采用 B+树 的数据结构进行存储. - 例如,我们建立一张表,分析他的数 ...

  6. Word 插入目录的 5 种方法

    1. "运用多级编号法"之图文教程 效果图: 步骤: 首先,为了更好的演示,我们先将我们的一级标题全部选中,按住Ctrl键,去一一选择就行了. 选中一级标题后,我们进入「开始」-「 ...

  7. Centos7.3 安装MYSQL

    安装mysql         1.进入到要存放安装包的位置             mkdir /home/lnmp             cd /home/lnmp         2.查看系统 ...

  8. Python 【收发邮件】

    发邮件 smtplib模块主要负责发送邮件 email模块主要负责构造邮件.这两个都是Python内置模块 smtplib.SMTP.方法 #按住Ctrl键并点击SMTP ,会看到对SMTP的解释(v ...

  9. Django 1.8.2 admin 数据库操作按下保存按钮出错

    Django报错:Runtimeerror: generator raised StopIteration python版本太新不兼容照成,下载python3.6就行了

  10. Java中自增(++)和赋值(=)运算效率比较

    前言   将一个int型数组x[]从初值0变成1.有两种做法: // 只考虑后自增 int length = x.length; for (int i = 0; i < length; i++) ...