cookie删除购物车里面多个项

来源:互联网 发布:数据库修改语句例题 编辑:程序博客网 时间:2024/06/06 01:22

当我们在Cookie用ArrayList保存购物车里面的项时,单个的删除是简单的。

List<CartItem> list = getCartItemList(request, response);for (CartItem cartItem : list) {if (cartItem.getId() == itemId) {System.out.println("list " + list.size());list.remove(cartItem);CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.objectToJson(list));System.out.println("list " + list.size());break;}}
那如果是多个删除呢?

如果像这样一个个地删除

List<CartItem> list = getCartItemList(request, response);// 12,232String[] itemIds = item_list.split(",");long id1 = Long.parseLong(itemIds[0]);long id2 = Long.parseLong(itemIds[1]);System.out.println("id1: " + id1 + " id2" + id2);int index = 0;for (CartItem cartItem : list) {index++;System.out.println(index);if (cartItem.getId() == id1) {System.out.println("id1list " + list.size());list.remove(cartItem);System.out.println("cartItem " + cartItem.getId());}if (cartItem.getId() == id2) {System.out.println("id2list " + list.size());list.remove(cartItem);System.out.println("cartItem " + cartItem.getId());}}CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.objectToJson(list));System.out.println("list " + list.size());

是删除不了的,因为ArrayList会记录当前的项的下面,如果你在同一个循环删除。下标就混乱,造成无法删除。

怎么解决呢?我们先把要删除的项放在一个新的数组,然后在和原来数组删除,就可以了,

public TaotaoResult deleteCheck(String item_list, HttpServletRequest request, HttpServletResponse response) {List<CartItem> list = getCartItemList(request, response);List<CartItem> list2 = new ArrayList<>();String[] itemIds = item_list.split(",");int index = 0;for (CartItem cartItem : list) {index++;System.out.println(index);for (int i = 0; i < itemIds.length; i++) {if (cartItem.getId() == Long.parseLong(itemIds[i])) {list2.add(cartItem);}}}list.removeAll(list2);CookieUtils.setCookie(request, response, "TT_CART", JsonUtils.objectToJson(list));System.out.println("list " + list.size());return TaotaoResult.ok();}
祝解决。

0 0
原创粉丝点击