繁体   English   中英

包含地图对象

[英]Contains object in map of maps

我有一个地图,我需要查看对象是否在地图的值中。

以前,代码如下所示:

objectMap = new HashMap<String, byte[]>();

protected boolean containsObject(final byte[] testObject) {
for(byte[] bytes : objectMap.values()) {
  if (Arrays.equals(bytes, testObject)) {
    return true;
  }
}
return false;
}

这很好。 但是, objectMap现在已更改为:

objectMap = new HashMap<String, Map<String, byte[]>>();

现在,我需要具有相同的containsObject方法...

protected boolean containsObject(final byte[] testObject) {
for(Map<String, byte[]> map : objectMap.values()) {
  if (value of map.equals(testObject)) {
    return true;
  }
}
return false;
}

我不确定的是如何获得正在迭代的地图的价值,因为我没有可以使用的钥匙。

谢谢。

获取valuesvalues 您已经调用values()从第一个示例中获取byte[] 现在,您将获得另一个Map ,可以从中再次调用values()

for (Map<String, byte[]> map : objectMap.values()) {
    for (byte[] bytes: map.values()) {
        // Test for equality as you already have done before.

您的测试是一个映射等于一个byte []。 从逻辑上讲,这永远不可能是正确的。

您需要遍历地图的值并检查每个值:

protected boolean containsObject(final byte[] testObject) {
   for(Map<String, byte[]> map : objectMap.values()) {
       for(byte[] b : map.values()) {
            if (Arrays.equals(b,testObject)) {
               return true;
            }
       }
   }
   return false;
}

我认为您可以尝试使用外部地图的keySet()- Method。 像这样:

protected boolean containsObject(final byte[] testObject) {
  for(Map<String, byte[]> map : objectMap.values()) {
    for (String key : map.keySet()) {
      if(map.get(key).equals(testObject) {
        return true;
      }
    }
  }
  return false;
}

您可以使用Map.Entry对其进行访问,这是一个示例:

for(Map.Entry<Integer, String> entry : objectMap ) {  
  System.out.println(" Key: " + entry.getKey());  
  System.out.println(" Value: " + entry.getValue());  
  entry.setValue("Khanjian");  
}  

暂无
暂无

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

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