arraylist中的数量字段增加

时间:2018-09-11 13:03:46

标签: java arraylist

如果客户选择相同的产品将商品添加到数组列表中,那么我需要增加数量字段的值。

我有一个链接addtoitems,当客户单击此链接时,product_id,user_id,product_name,price将发送到addtocart方法。

在该addtocart方法中,我创建了一个基于会话的列表,并向数组列表添加了product_id, user_id, product_name, price, quantity和一些整数值i=0的项。

我的问题是,如果用户在产品表中选择相同的项目,则arraylist数量字段应该增加。

但是在这里,我遇到的问题是,来自客户的每个请求(我的意思是同一项目)都增加了数量字段,但又增加了一个项目(product_id,user_id,product_name,price,quantity,和一些整数值i = 0)添加到arraylist。

// adding addtocart details to shopping cart table  arraylist
@RequestMapping(value = "/addtocart", method = RequestMethod.GET)
public ModelAndView addToCart(ModelAndView model, HttpServletRequest req,
        HttpServletResponse res,
        HttpSession session,
        @RequestParam Integer product_id,
        @RequestParam String price,
        @RequestParam String product_name,
        @RequestParam Integer user_id,
        @ModelAttribute Product product) {

    req.getSession().setAttribute("product_id", product_id);

    //adding multiple products to the list starts here
    session = req.getSession();
    // here session.setAttribute list value stored in 
    session.getAttribute("list");
    @SuppressWarnings("unchecked")
    List<Shopping_Cart> list = (List<Shopping_Cart>) session.getAttribute("list");

    if (list == null) {
        list = new ArrayList<>();
    }

    int i = 1;
    int quantity = 0;
    // Add the product_id,user_id,product_name & price to List
    list.add(new Shopping_Cart(product_id, user_id, product_name, price, i, quantity));

    int prod_id = 0;

    for (Shopping_Cart qnty : list) {
        prod_id = qnty.getProduct_id();

        if (prod_id == product_id) {
            qnty.setQuantity(qnty.getQuantity() + 1);
        } else {

        }
    }

    session.setAttribute("list", list);
    return new ModelAndView("ViewAddToCart");
}

1 个答案:

答案 0 :(得分:0)

第一页:
如果要增加列表中的值,可以使用流来快速,简短地完成此操作:

list.stream().filter(p -> p.getProductId().equals(productId)).map(p -> p.setQuantity(p.getQuantity() + 1));

第二:
如您所知,您不能仅通过产品ID来识别产品,因此您需要一种元组(productId,userSession)。 尝试为每个用户分配一个会话,然后执行以下操作:

list.stream().filter(user -> user.getSessionId().equals(sessionIdOfRequestingUser).filter(p -> p.getProductId().equals(productIdThatWasAdded)).map(p -> p.addQuantity(1));

然后,我将给Product类一个允许增加数量的方法。如果此方法接受一个值,您以后可以轻松地做一些快速选择的事情:

public void addQuantity(int quantity) {
  this.quantity += quantity;
} 

更新:
刚刚看到您正在传递一个userId,因此您可以执行以下操作:

list.stream().filter(user -> user.getSessionId().equals(userId).filter(p -> p.getProductId().equals(productIdThatWasAdded)).map(p -> p.addQuantity(1));