第一次来这里,所以我希望这是有道理的!
我有一个Map,它包含一个字符串作为它的键,一个字符串列表作为它的值。我需要遍历Map中每个List中包含的所有值。
所以,首先我要获得有效的键:
Set<String> keys = theMap.keySet();
这会返回一个包含我所有键的Set。太棒了:))
这就是我遇到的问题 - 网上的大部分信息似乎都假设我想要从Key返回的值是一个简单的String或Integer,而不是另一个Set,或者在这种情况下是名单。我尝试了theMap.values()
但是没有用,我尝试了一个forloop / for:eachloop,而且这些都没有成功。
谢谢你们!
答案 0 :(得分:17)
for(List<String> valueList : map.values()) {
for(String value : valueList) {
...
}
}
这真的是“正常”的做法。或者,如果您还需要钥匙......
for(Map.Entry<String, List<String>> entry : map.entrySet()) {
String key = entry.getKey();
for (String value : entry.getValue()) {
...
}
}
也就是说,如果你有选项,你可能会对Guava's ListMultimap
感兴趣,这很像Map<K, List<V>>
,但有很多功能 - 包括Collection<V> values()
的行为与您要求的完全相同,将多图中的所有值“展平”为一个集合。 (披露:我向Guava捐款。)
答案 1 :(得分:4)
我建议迭代Map.entrySet()
,因为它更快(你同时拥有密钥和值,一步找到)。
Map<String, List<String>> m = new HashMap<String, List<String>>();
m.put("list1", Arrays.asList("s1", "s2", "s3"));
for (Map.Entry<String, List<String>> me : m.entrySet()) {
String key = me.getKey();
List<String> valueList = me.getValue();
System.out.println("Key: " + key);
System.out.print("Values: ");
for (String s : valueList) {
System.out.print(s + " ");
}
}
输出正如预期的那样:
Key: list1 Values: s1 s2 s3
答案 2 :(得分:0)
您需要Map<String, List<String>>
左侧是String
,右侧List<String>
是值,在这种情况下是List
String
s