如何只向ArrayList <hashmap <string,string>&gt;添加唯一值?</hashmap <string,string>

时间:2014-07-14 11:04:29

标签: android arraylist hashmap

我正在尝试在我的应用程序中执行以下操作:

我从一些String获得了一些Textviews个值。我将以下列方式将此值添加到ArrayList<HashMap<String,String>>,其中

cart_list的类型为HashMap<String,String>>,购物车的类型为ArrayList<HashMap<String,String>>

    cart_list.put("quantity",""+qty);
    cart_list.put("item_id"+item_id_number,""+item_id_number);
    cart_list.put("Category",Itemname);
    cart_list.put("Details",Item_details);
    cart_list.put("Price",Item_price);
    cart_list.put("Currency",Item_currency);
    cart_list.put("images",images);
    cart.add(cart_list);

我想只为cart添加唯一值。如何检查“ArrayList&gt;”中是否已存在给定值。请告诉我一步一步做什么。

4 个答案:

答案 0 :(得分:1)

试试这个..

for(int i = 0; i < cart.size(); i++){
     if(cart.get(i).containsKey(yourkey))
        Toast.makeText(getBaseContext(), "The key already present in HashMap.", Toast.LENGTH_SHORT).show();

     if(cart.get(i).containsValue(yourvalue)){
           String key = getKeyByValue(cart.get(i), yourvalue);
           if(key.equals(yourkey)){
                 Toast.makeText(getBaseContext(), "The keys are same having same value.", Toast.LENGTH_SHORT).show();
           }
     }

}

和getKeyByValue方法

public static <T, E> T getKeyByValue(Map<T, E> map, E value) {
    for (Entry<T, E> entry : map.entrySet()) {
        if (value.equals(entry.getValue())) {
            return entry.getKey();
        }
    }
    return null;
}

在此 yourkey 中,您要检查给定的密钥(字符串,如数量)已经存在

yourvalue ,例如购物车 HashMap值中的Itemname

答案 1 :(得分:0)

使用Set实现之一而不是ArrayList

A Set is a Collection that cannot contain duplicate elements

Here文档

答案 2 :(得分:0)

    Set<String> st = cart_list.keySet();
    if(!st.contains("newKey")){
        cart_list.put("YourKey", "Yourvalue");
        cart.add(cart_list);    
    }
    else{
        System.out.println("Dupliation not allowed");
    }

答案 3 :(得分:0)

尝试使用不同的集

public ArrayList<HashMap<String,String>> DistN(ArrayList<HashMap<String,String>> col)
    {

        ArrayList<HashMap<String,String>> DistN;
        DistN = new ArrayList<HashMap<String,String>>();

        for(int i = 0; i < col.size(); i++) {

                final HashMap<String, String> chval = new HashMap<String, String>();
                chval.put(NO, col.get(i).get(NO));
                chval.put(IE, col.get(i).get(IE));

                if (!DistN.contains(chval)) {

                    DistN.add(chval);
                }

        }

        return DistDN;

    }