循环访问嵌套哈希映射

2022-09-03 03:55:53

如何迭代嵌套的哈希映射?

设置如下:HashMap

HashMap<String, HashMap<String, Student>>

其中 是包含变量 的对象。例如,如果我的HashMap看起来像这样(以下不是我的代码,它只是为了模拟哈希映射的内容)Studentname

 hm => HashMap<'S', Hashmap<'Sam', SamStudent>>
       HashMap<'S', Hashmap<'Seb', SebStudent>>
       HashMap<'T', Hashmap<'Thomas', ThomasStudent>>

我怎么能遍历所有单个字母键,然后每个全名键,然后拉出学生的名字?


答案 1
for (Map.Entry<String, HashMap<String, Student>> letterEntry : students.entrySet()) {
    String letter = letterEntry.getKey();
    // ...
    for (Map.Entry<String, Student> nameEntry : letterEntry.getValue().entrySet()) {
        String name = nameEntry.getKey();
        Student student = nameEntry.getValue();
        // ...
    }
}

...Java 10 中的关键字可以删除泛型的详细程度:var

for (var letterEntry : students.entrySet()) {
    String letter = letterEntry.getKey();
    // ...
    for (var nameEntry : letterEntry.getValue().entrySet()) {
        String name = nameEntry.getKey();
        Student student = nameEntry.getValue();
        // ...
    }
}

答案 2

Java 8 lambdas和Map.forEach使bkail的答案更加简洁:

outerMap.forEach((letter, nestedMap) -> {
    //...
    nestedMap.forEach((name, student) -> {
        //...
    });
    //...
});