遍历嵌套的哈希映射表

16

如何遍历嵌套的HashMap?

这个 HashMap 的结构如下:

HashMap<String, HashMap<String, Student>>

Student 是一个包含变量 name 的对象时。例如,如果我的 HashMap 看起来像这样(以下不是我的代码,只是模拟 HashMap 可能的内容)

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

我如何遍历所有单个字母键,然后是每个全名键,再提取学生的姓名?
2个回答

27
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();
        // ...
    }
}

遍历HashMaps of HashMaps 的完美和最佳代码。谢谢Brett。 - vkrams

14

Java 8的Lambda表达式和Map.forEach方法使得bkail的回答更加简洁:

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

这个 Map.forEach 对于 OP 来说是最简洁的,但在我的情况下,我需要原地修改映射值,所以我必须使用 for(var entry : entries.entrySet()) 形式。 - Chris Wolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接