给定以下情况:
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
更改为:
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;
}
}
只需通过强制转换为 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 定义为Map<String, Object>
因此它的值作为对象返回。 您可以通过 .
选角.
Map<String,String> map2 = = (Map<String,String>)map1.get("Gep")
对 m1 使用正确的泛型。
Map<String, Map<String, String>> map1 = new HashMap<>();
以下是上述问题的解决方案
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"));
}
}
希望这会起作用 谢谢。。。