Java arraylist中数量字段的增加

Java arraylist中数量字段的增加,java,arraylist,Java,Arraylist,如果客户选择相同的产品向arraylist添加项目,我需要增加quantity字段的值 // adding addtocart details to shopping cart table arraylist @RequestMapping(value = "/addtocart", method = RequestMethod.GET) public ModelAndView addToCart(ModelAndView model, HttpServletRequest req,

如果客户选择相同的产品向arraylist添加项目,我需要增加quantity字段的值

// 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");
}
我有一个addtoitems链接,当客户点击这个链接时,product\u id、user\u id、product\u name、price将发送到addtocart方法

在addtocart方法中,我创建了一个基于会话的列表,将产品id、用户id、产品名称、价格、数量和一些整数值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");
}
我的问题是,如果用户在product表中选择相同的项目,arraylist quantity字段应该会增加

但这里我遇到了一个问题,即来自客户的每个请求(我指的是同一个项目)都会增加数量字段,但会向arraylist添加一个项目product\u id、user\u id、product\u name、price、quantity和一些整数值I=0

// 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");
}
第一: 如果要增加列表中的值,可以使用流进行简短而快速的操作:

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类一个允许增加数量的方法。如果此方法接受一个值,您可以在以后轻松地执行一些quickselect操作:

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));

这个问题需要修改一下