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