在Java中,我正在尝试检索具有以下对象的HashMap<String, Object>
:HashMap<String, Object>
。
我实现了一个递归函数,它返回给定键找到的HashMap<String, Object>
,如果找不到键,则返回null
。
这是功能:
public static HashMap<String, Object> getHashMap(HashMap<String,
Object> map, String key)
{
for (Map.Entry<String, Object> entry : map.entrySet()) {
if (entry.getValue().getClass().getName() == "java.util.HashMap") {
if (entry.getKey() == key)
return (HashMap<String, Object>) entry.getValue();
return getHashMap((HashMap<String, Object>) entry.getValue(), key);
}
}
return null;
}
它仅适用于第一项。如何遍历HashMaps的Hashmap?什么是更好的方法?
答案 0 :(得分:1)
首先,不要将==
用于字符串。而是使用equals方法。
另一方面,我更喜欢像if (myObject instanceof java.util.Map) { ... }
这样的实例,这样如果您以后决定更改地图,则地图不一定是HashMap。
答案 1 :(得分:1)
而不是立即返回值:
return getHashMap((HashMap<String, Object>) entry.getValue(), key);
您要首先检查它是否不是null
,然后才返回。否则你应该继续搜索:
HashMap<String, Object> result = getHashMap((HashMap<String, Object>) entry.getValue(), key);
if (result != null)
return result;
答案 2 :(得分:0)
另一种方法。尝试使用HashMap<String, HashMap<String, Object>> main
作为“外部”HashMap,然后搜索key
:
Object value = main.get(key);
if (value == null) {
for (HashMap<String, Object> inner : main.values()) {
value = inner.get(key);
if (value != null) {
break;
}
}
}