如何在Java中访问嵌套的HashMaps?实现用法

2022-08-31 23:48:15

我有一个Java中的HashMap,其内容(你们可能都知道)可以通过以下方式访问

HashMap.get("keyname");

如果一个在另一个HashMap中有一个HashMap,即嵌套的HashMap,我将如何访问内容?我可以这样做吗,内联:

HashMap.get("keyname").get("nestedkeyname");

谢谢。


答案 1

你可以像你想象的那样去做。但是你的HashMap必须模板化:

Map<String, Map<String, String>> map = 
    new HashMap<String, Map<String, String>>();

否则,您必须在从第一个地图中检索第二个地图后进行强制转换。Map

Map map = new HashMap();
((Map)map.get( "keyname" )).get( "nestedkeyname" );

答案 2

您可以通过重复来获得嵌套值,但是对于深度嵌套的映射,您必须进行大量转换。一种更简单的方法是使用泛型方法来获取嵌套值。.get()Map

实现

public static <T> T getNestedValue(Map map, String... keys) {
    Object value = map;

    for (String key : keys) {
        value = ((Map) value).get(key);
    }

    return (T) value;
}

用法

// Map contents with string and even a list:
{
  "data": {
    "vehicles": {
      "list": [
        {
          "registration": {
            "owner": {
              "id": "3643619"
            }
          }
        }
      ]
    }
  }
}
List<Map> list = getNestedValue(mapContents, "data", "vehicles", "list");
Map first = list.get(0);
String id = getNestedValue(first, "registration", "owner", "id");