相关博客:https://hcshow.blog.csdn.net/article/details/119052399
商品
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class Goods {
private Integer id;
private String name;
private double price;
private String imgs;
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Goods goods = (Goods) o;
return Double.compare(goods.price, price) == 0 &&
Objects.equal(id, goods.id) &&
Objects.equal(name, goods.name) &&
Objects.equal(imgs, goods.imgs);
}
@Override
public int hashCode() {
return Objects.hashCode(id, name, price, imgs);
}
}
注:通过重写equals和hashCode两个方法实现往Set中添加商品时,同一种商品在购物车中不被当作两个元素。
实现一: 使用Map<商品,购买数量> 表示商品(建议)
public class CartDemo{
public static void main(String[] args) {
Map<Goods,Integer> cart = new HashMap<>();
//第一次购买1号商品3个
Goods key = new Goods(1,"honor",22,"honor.jpg");
int amount =3;
addGoods2Cart(cart, key, amount);
//第二次购买1号商品4个
key =new Goods(1,"honor",22,"honor.jpg");
amount =4;
addGoods2Cart(cart,key,amount);
//第三次购买3号商品1个
key =new Goods(3,"xiaomi",11,"xiaomi.jpg");
amount =1;
addGoods2Cart(cart,key,amount);
cart.forEach((k,v)-> System.out.println(k+" : "+v));
}
private static void addGoods2Cart(Map<Goods, Integer> cart, Goods key, int amount) {
if(cart.containsKey(key)){//如果新买商品已包含
cart.put(key,cart.get(key)+amount) ;
}else{//未包含
cart.put(key,amount);
}
}
}
实现二 :使用Map<商品编号,购买数量> 表示商品(不建议)
public static void main(String[] args) {
//商品的id 商品的数量
Map<Integer, Integer> cart = new HashMap<>();
//第一次购买1号商品3个
cart.put(1, 4);
//第二次购买1号商品4个
cart.put(1, 3);
//第三次购买3号商品1个
cart.put(3, 1);
//输出购物车中的内容
cart.forEach((k,v)->{
//从数据库中根据Goods的id,查询出Goods的详情
Goods goods = new Goods(); //每次查看购物车都需要查询,效率不高
goods.setId(k);
System.out.println(goods +" : "+v);
});
}