【问题标题】:how to remove java map value(not key) in java?如何在java中删除java映射值(不是键)?
【发布时间】:2013-10-30 04:34:41
【问题描述】:

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

谢谢!

【问题讨论】:

  • valuekey 关联。
  • 我不明白您删除值的意思。您可以找到该键,然后将其值设置为 null。或者您可以完全删除键值对。

标签: java android map


【解决方案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

【讨论】:

    【解决方案2】:

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

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

    可能的解决方案

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

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

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

    【讨论】:

    • Map.Entry> 类型中的方法 setValue(ArrayList) 不适用于参数 (String)
    【解决方案3】:

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

    但是您可以将键设置为null,首先您需要使用一个接受空值的映射,它是HashMap&lt;K,V&gt; (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);
          }
        }
      }
    }
    

    EDIT : 并删除一个值,所以它会是一样的。

    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++;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-09
      • 2012-05-30
      • 2015-03-11
      • 1970-01-01
      • 2010-12-13
      • 2021-02-08
      • 1970-01-01
      • 2016-09-15
      相关资源
      最近更新 更多