[英]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;
}
我不确定的是如何获得正在迭代的地图的价值,因为我没有可以使用的钥匙。
谢谢。
获取values
的values
。 您已经调用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.