返回嵌套的hashmap

时间:2014-10-05 17:15:05

标签: java hashmap nested

我有两个HashMaps,其中Student是我创建的对象,其格式为Student(String, String)

static HashMap<String, Student> hashMap = new HashMap<>();
static HashMap<String, HashMap<String, Student>> finalHashMap = new HashMap<>();

我创建了以下Students并将其添加到hashMapfirstName作为Key

Student st1 = new Student("julian", "rogers");
Student st2 = new Student("jason", "Smith");

hashMap.put("julian", st1);
hashMap.put("jason", st2);

然后我将hashMap添加到finalHashMapfirstName的第一个字母为key

finalHashMap.put("j", hashMap);

如何使用键j

返回hashmap

我尝试创建一个新的hashmap并使用get()但它没有用。我得到null pointer exception

static HashMap<String, Student> hashMapTemp = new HashMap<>();
hashMapTemp.putAll(finalHashMap.get('j'));

for (String key : hashMapTemp.keySet())
{
    System.out.println(key + " " + hashMapTemp.get(key));
}

输出

 java.lang.NullPointerException
    at java.util.HashMap.putAll(Unknown Source)

注意:我尝试使用put()并且也遇到了同样的错误。

3 个答案:

答案 0 :(得分:2)

hashMapTemp.putAll(finalHashMap.get('j'));

我认为这应该是:

hashMapTemp.putAll(finalHashMap.get("j"));

finalHashMap中的密钥是字符串,而不是字符。

答案 1 :(得分:0)

hashMapTemp.putAll(finalHashMap.get('j'));

这一行很奇怪,你找一个字符而不是一个字符串(正如你所定义的那样)。 考虑使用static HashMap<Character, Student> finalHashMap = new HashMap<>()

答案 2 :(得分:-1)

public static HashMap<String, Student> find(String key, HashMap<String, HashMap<String, Student>> dataMap) {
    HashMap<String, Student> result = null;
    for (String s : dataMap.keySet()) {
        if (s.equalsIgnoreCase(key)) {
            result = dataMap.get(s);
            break;
        }
    }
    return result;
}

然后只需调用这个方法:

HashMap<String, Student> result = find("j", finalHashMap);