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

时间:2019-10-10 11:08:51

标签: 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);

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

4 个答案:

答案 0 :(得分:6)

map1更改为:

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

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

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

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

如果必须将map1保留为Map<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;
    }
} 

答案 1 :(得分:4)

只需通过投射到Map即可从map1中检索map2,然后从该Map中获得所需的值:

return ((Map<String,String>)map1.get("Grp")).get("Grp A");

但是,更好的做法是在检索“ Grp A”之前检查map2不为空:

Map<String,String> map = (Map<String,String>)map1.get("Grp");
if (map != null) {
    return map.get("Grp A");
}

@Eran的答案会更好,但是OP询问如何从给定的HashMap中检索值。

答案 2 :(得分:1)

由于您将map1定义为Map<String, Object>,因此其值将作为对象返回。 您可以通过。
来解决此问题。 铸造

Map<String,String> map2 =  = (Map<String,String>)map1.get("Gep")

为m1使用正确的泛型

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

答案 3 :(得分:0)

以下是上述问题的解决方案

import java.util.HashMap;
import java.util.Map;

public class HashMapExample {

    public static void main(String[] args) {

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

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

        map1.put("Grp",map2);

        System.out.println(map1.get("Grp").get("Grp A"));
    }
}

希望这会起作用 谢谢...