2

我有一个带有这个键和值的 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) 只是删除了带有值的孔键,我不想要它。

谢谢你!

4

3 回答 3

1

我怎样才能删除一个值而不是一个键?

我不确定你为什么要这样做,但你不能,AFAIK。

可能的解决方案

您可以做的是将其更改value为空值String或默认String值。然后,当您想查找key没有“的value”时,您可以按原样迭代并搜索空的String/default value

要修改 current value,您应该可以使用setValue。所以像

if(entry.getValue().equals(torlendoValue)) {
                entry.setValue("defaultString");
}
于 2013-10-21T15:35:51.113 回答
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

于 2013-10-21T16:10:31.943 回答
0

您不能删除键并保持值持久性,因为Map<K,V>接口的实现类不允许没有任何引用的值,换句话说,键和值的大小应该相同。

但是您可以将键设置为null,首先您需要使用一个接受空值的 Map 并且它是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++;
  }
}
于 2013-10-21T16:02:34.513 回答