Java arraylist中数量字段的增加
如果客户选择相同的产品向arraylist添加项目,我需要增加quantity字段的值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,
// 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));
这个问题需要修改一下