将HashMap存储在Map <String,Object>内部

Vip*_*629 1 java hashmap

鉴于以下情况:

Map<String, Object> map1 = new HashMap();
Map<String, String> map2 = new HashMap();

map2.put("Grp A", "a");
map2.put("Grp B", "b");

map1.put("Grp",map2);
Run Code Online (Sandbox Code Playgroud)

如何从map1中获取“ Grp A”值?

Era*_*ran 6

更改map1为:

Map<String, Map<String, String>> map1 = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

然后map1.get("Grp").get("Grp A")将工作。

当然,通常,将其存储map1.get("Grp")在变量中并在调用第二个变量之前检查它是否不为null 会更安全get()

String value = null;
Map<String, String> inner = map1.get("Grp");
if (inner != null) {
    value = inner.get("Grp A");
}
Run Code Online (Sandbox Code Playgroud)

如果必须保持map1Map<String, Object>(例如,如果必须在其中存储不同类型的值),则必须检查从外部获取的值的类型Map,并将其转换为,Map然后再获取内部值:

String value = null;
Object innerObj = map1.get("Grp");
if (innerObj instanceof Map<?,?>) {
    Map<?,?> inner = (Map<?,?>) map1.get("Grp");
    Object obj = inner.get("Grp A");
    if (obj instanceof String) {
        value = (String) obj;
    }
} 
Run Code Online (Sandbox Code Playgroud)