鉴于以下情况:
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”值?
答案 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"));
}
}
希望这会起作用 谢谢...