我有一张地图地图,我需要查看一个对象是否在地图的值中。
以前,代码看起来像这样:
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;
}
我不确定的是如何获取正在迭代的地图的值,因为我没有可以使用的密钥。
感谢。
答案 0 :(得分:3)
获取values
的{{1}}。您已调用values
来获取第一个示例中的values()
。现在,您将获得另一个byte[]
,您可以再次致电Map
。
values()
答案 1 :(得分:0)
您的测试是一个映射等于一个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;
}
答案 2 :(得分:0)
我认为您可以尝试使用外部地图的keySet() - 方法。像这样:
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;
}
答案 3 :(得分:0)
您可以使用Map.Entry访问它,这是一个示例:
for(Map.Entry<Integer, String> entry : objectMap ) {
System.out.println(" Key: " + entry.getKey());
System.out.println(" Value: " + entry.getValue());
entry.setValue("Khanjian");
}