Java代码模拟实现购物车

相关博客: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);
        });
    }
  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁云亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值