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
这与您要求的完全一样,将多图中的所有值“展平”为一个集合。 (披露:我向番石榴捐款。)
我建议迭代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
是值,在本例中是String
的List