2013-10-21 49 views
2

我有一個Java地圖與此鍵和值:如何在java中刪除java映射值(不是鍵值)?

Xperia:[EM_A, EM_B, M-bus +, M-bus -, MB1, MB2, MB3, MB4, MB5, DOUT1, DOUT2, DOUT3, DOUT4, DOUT5, DOUT6, DOUT7, DOUT8]

我已經試過這種方式,但它不工作:

final Iterator<Entry<String, ArrayList<String>>> iter = termekConf.devNameType.entrySet().iterator(); 
      while(iter.hasNext()) { 
        final Entry<String, ArrayList<String>> entry = iter.next(); 
        if(entry.getValue().equals(torlendoValue)) { 
        iter.remove();     
        } 
       } 

我怎麼能刪除一個值不是一個關鍵? 我真的不知道它,因爲myMap.remove(key)只是刪除了帶有值的洞鍵,而我不想要它。

謝謝!

+0

'value'與'key'關聯。 –

+4

我不明白你的意思是通過刪除價值。您可以找到該密鑰,然後將其值設置爲空。或者您可以完全刪除鍵值對。 – Reji

回答

1
myMap.devNameType.get('Key').remove('Value'); 

HashMap<String, ArrayList<String>> mMap = new HashMap<String, ArrayList<String>>(); 
ArrayList<String> listA = new ArrayList<String>(); 
ArrayList<String> listB = new ArrayList<String>(); 
ArrayList<String> listC = new ArrayList<String>(); 
ArrayList<String> listD = new ArrayList<String>(); 

listA.add("1"); 
listA.add("2"); 
listA.add("3"); 
listA.add("5"); 

mMap.put("A", listA); 
mMap.put("B", listB); 
mMap.put("C", listC); 
mMap.put("D", listD); 


myMap.get("A").remove("3"); 

它會從鍵 'A' 的 '3' 的值。

JavaDoc

1

我該如何刪除一個值而不是一個鍵?

我不確定你爲什麼想這樣做,但你不能,AFAIK。

可能的解決方法

你可以做的就是改變這種value爲空String或默認String值。然後,當您想查找「key s沒有value」時,您可以按照原樣進行迭代並搜索空的String /默認value

要修改當前的value,您應該可以使用setValue。因此,像

if(entry.getValue().equals(torlendoValue)) { 
       entry.setValue("defaultString"); 
} 
+0

類型Map.Entry >中的方法setValue(ArrayList )不適用於參數(String) – bazzs

0

您不能刪除鍵和保持價值的持久性,因爲Map<K,V>接口實現類不允許沒有任何參考價值,在其他字的大小兩個關鍵的和值應該是相同。

,但你可以通過設置鍵null,首先你需要利用其acceps空值的地圖,它的HashMap<K,V>(javadoc的here) 例子:

Map<String,Object> dic=new HashMap<>(); 
//filling the map 
    for(String sx:dic.keySet()){ 
    if(<<cound the victim>>){ 
     synchronized(dic){//HashMap is not synchronized! 
     Object ox=dic.get(sx); 
     dic.remove(sx); 
     dic.put(null,ox); 
     } 
    } 
    } 
} 

編輯:和刪除值,所以它會一樣。

Map<String,Object> dic=new HashMap<>(); 
//filling the map 
String[] keys=dic.keySet().toArray();int i=0; 
    for(Object ox:dic.values()){ 
    if(<<cound the victim>>){ 
     synchronized(dic){//HashMap is not synchronized! 
      String key=keys[i] 
      dic.remove(key); 
      dic.put(key,null); 
     } 
    }i++; 
    } 
}