Java – 迭代包含List的Map

第一次在这里,所以我希望这是有道理的!

我有一个Map,它包含一个String作为它的键,一个字符串列表作为它的值。 我需要迭代Map中每个List中包含的所有值。

所以,首先我要获得Keys,它有效:

Set keys = theMap.keySet(); 

这会返回一个包含我所有键的Set。 太棒了:)

这就是我被困住的地方 – 网上的大部分信息似乎都假设我想从Key返回的值是一个简单的String或Integer,而不是另一个Set,或者在这种情况下是List。 我尝试了theMap.values()但是没有用,我尝试了一个forloop / for:eachloop,但这些都没有。

谢谢你们!

 for(List valueList : map.values()) { for(String value : valueList) { ... } } 

这真的是“正常”的做法。 或者,如果你还需要钥匙……

 for(Map.Entry> entry : map.entrySet()) { String key = entry.getKey(); for (String value : entry.getValue()) { ... } } 

也就是说,如果你有选择,你可能会对Guava的 ListMultimap ,它很像Map> ,但是有很多function – 包括Collection values()这与您要求的完全一样,将多图中的所有值“展平”为一个集合。 (披露:我向番石榴捐款。)

我建议迭代Map.entrySet()因为它更快(你有两个,键和值,一步找到)。

 Map> m = new HashMap>(); m.put("list1", Arrays.asList("s1", "s2", "s3")); for (Map.Entry> me : m.entrySet()) { String key = me.getKey(); List valueList = me.getValue(); System.out.println("Key: " + key); System.out.print("Values: "); for (String s : valueList) { System.out.print(s + " "); } } 

输出是,如预期的那样:

关键:list1
值:s1 s2 s3 

您需要Map>

左侧的String是键,右侧的List是值,在本例中是StringList