将哈希映射存储在 Map<String、Object>



给定以下情况:

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"));
}
}

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

相关内容

最新更新