繁体   English   中英

在HashMap中使用相同的键存储/取消设置多个值

[英]Store / unset multiple values with same key in HashMap

我正在与在线商店项目合作。 目前,无论用户是否登录,我都在尝试增加将产品添加到购物车的可能性。 我正在使用会话bean方法来做到这一点。

@Inject ShoppingCartSessionBean shoppingCartSessionBean; 

@POST
public boolean addToCart(@PathParam("productid") int newProductId, @PathParam("qu") int newProductQuantity) {
    shoppingCartSessionBean.setCartItems(newProductId);
    shoppingCartSessionBean.setProductQuantity(newProductQuantity);
    return true;    
 }

我想将ID存储在哈希图中。 但是,目前我只能为setter方法设置一个id。

@Stateful
@SessionScoped
public class ShoppingCartSessionBean implements Serializable{

HashMap<Integer, Integer> newmap = new HashMap<Integer, Integer>();

public int addToHashMap() {  

return array of productId's.
}

private static final long serialVersionUID = -5024959800049014671L;

private int productId;

private int productQuantity;

//getters and setters

Map<Integer, ShoppingCartSessionBean> hm = new HashMap<Integer, ShoppingCartSessionBean>();

稍后,我使用实体管理器来检查设置了哪些ID / ID,并将有关该ID的所有信息发送回给用户。 由于空间问题,我没有将所有值存储在会话bean中。

Query q = em.createQuery("SELECT c FROM Items c WHERE c.productId = :itemid");
        q.setParameter("itemid", shoppingCartSessionBean.addToHashMap());

所以我有几个问题:

  1. 将此类信息存储在哈希图中是个好选择吗? 还是应该使用Cookie?

  2. 我的addToHashmap方法应如何在哈希图中存储多个ID? (我尝试使用实体管理器打印出简单的int [] array = {123,456},但是出现JSON错误...)。

  3. 从哈希图中删除/取消设置此类信息的最佳方法是什么?

我希望我的信息清楚,如果您缺少什么-现在让我来。

第2点和第3点。您需要检查是否存在哈希冲突,在肯定的情况下,您需要对其进行处理。 看下面的代码。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;


public class HashMapTest {

    private static HashMap<String, List<String>> map = new HashMap<String, List<String>>();

    public static void insert(String key, String value){
        List<String> list = map.get(key);
        if (list == null){
            list = new ArrayList<String>();
            map.put(key, list);
        }
        list.add(value);
    }



    public static void main(String[] args){

        insert("10", "V1");
        insert("10", "V2");
        insert("20", "V3"); 
        insert("20", "V4");
        insert("30", "V5");
        List<String> values10 = map.get("10");
        System.out.println(values10);
        List<String> values20 = map.get("20");
        System.out.println(values20);
        List<String> values30 = map.get("30");
        System.out.println(values30);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM