重写了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. sas(Serial Attached SCSI)技术详解

    1.什么是SAS 即串行SCSI技术,是一种磁盘连接技术,它综合了并行SCSI和串行连接技术(FC,SSA,IEEE1394)的优势,以串行通讯协议为协议基础架构,采用SCSI-3扩展指令集,并兼容S ...

  2. opencv根据摄像头名称获取索引值

    OpenCV的VideoCapture是一个视频读取与解码的API接口,支持各种视频格式.网络视频流.摄像头读取. 针对一般摄像头的读取,opencv为了实现跨平台读取摄像头时是使用的摄像头索引, V ...

  3. win10安装docker运行环境

    转自:https://www.cnblogs.com/stulzq/p/7743667.html Docker for Windows是Docker社区版(CE)应用程序. Docker for Wi ...

  4. vim入门一 常用指令

    以下为自己常用的vim指令总结 一.插入命令 a 在光标所在字符后进入插入模式 A 调到光标所在行行尾进入插入模式 i 在光标所在字符前插入模式 I 调到光标所在行行首进入插入模式 o 调到光标所在上 ...

  5. 切片(Slice)

    Python提供了切片(Slice)操作符:可以一次取出多个列表元素 L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3.0可以省略:L[:3] L[:]:就是整个列表   补充: 前1 ...

  6. Yii2 设计模式——单例模式

    单例模式 模式定义 单例模式确保一个类只有一个实例,并提供一个全局访问点.当现实中只需要一个对象,或者为了节省系统资源,又或者是为了共享数据的时候可以使用单例模式. 代码实现 我们先来看看单例模式的标 ...

  7. redis键的迁移操作

    1.redis单个实例内多库间的数据迁移操作 命令名称:move 语法:move key db 功能:将当前数据库的key移动到给定的数据库db当中.如果当前数据库(源数据库)和给定数据库(目标数据库 ...

  8. springboot 整合 web 项目找不到 jsp 文件

    今天遇到一个问题,就是使用springboot整合web项目的时候,怎么都访问不到 \webapp\WEB-INF\jsp\index.jsp 页面.这个问题搞了半天,试了各种方式.最后是因为在启动的 ...

  9. hdu 1285 拓扑

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  10. (十二)Activitivi5之流程控制网关:排他

    一.概念 所谓排他网关 顾名思义 执行到该网关,根据条件只能走一条执行线 二.案例 当流程走到“学生请假”任务节点的时候, /** * 完成任务 */ @Test public void test_c ...