Java 在Map

Java 在Map,java,hashmap,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值?只需通过强制转换到地图从map1中检索map2,然后从该地图中获取所需的值: return ((Map<S

鉴于以下情况:

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值?

只需通过强制转换到地图从map1中检索map2,然后从该地图中获取所需的值:

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检索值。

只需通过强制转换到一个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检索值。

将map1更改为:

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

如果必须将map1保留为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;
    }
} 
因为您将map1定义为Map,所以它的值将作为对象返回。 你可以通过以下两种方法来解决这个问题。 铸造

为m1使用正确的泛型

因为您将map1定义为Map,所以它的值将作为对象返回。 你可以通过以下两种方法来解决这个问题。 铸造

为m1使用正确的泛型


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

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"));
    }
}
希望这能奏效
谢谢…

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

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"));
    }
}
希望这能奏效 谢谢…

?仅供参考:您使用的是原始仿制药。不要那样做!使用菱形操作符:新建HashMap?仅供参考:您使用的是原始泛型。不要那样做!使用菱形操作符:newhashmap