2012-04-09 5 views
4

처음 여기 여기에 의미가 있습니다.Java - 목록이 포함 된지도를 반복하십시오.

나는 String의 Key와 String의 List를 Value로 포함하는 Map을 가지고있다. 맵 내의 각 목록에 포함 된 모든 값을 반복해야합니다.

Set<String> keys = theMap.keySet(); 

이 나에게 내 모든 키를 포함하는 세트를 반환

그래서 먼저 내가 작동 키를 싶어. 위대한 :)

여기 내가 붙어있어 - 대부분의 웹 정보는 내가 Key에서 반환 된 원하는 값을 간단한 문자열 또는 정수, 다른 집합, 또는 것이라고 가정하는 것 이 경우 목록. 나는 theMap.values()을 시도했으나 작동하지 않았다. forloop/for : eachloop을 시도했는데 그 중 하나도 속임수를 쓰지 않았다.

고마워요!

답변

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

정말 "정상적인"방법입니다. 또는, 당신은뿐만 아니라 키를 ... 필요하면이 옵션을 가지고 있다면, 당신은 Map<K, List<V>> 같은 많은입니다 Guava'sListMultimap, 관심이 있지만, 더 많은 기능을 가지고 있습니다 말했다

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

- 당신이 요구하는 것과 똑같이 작동하는 Collection<V> values()을 포함하여 멀티 맵의 모든 값을 하나의 컬렉션으로 "평평하게"합니다. (공시 : 나는 구아바에 기여한다.)

+0

나는이 이렇게 많은 변화를 통해 갔던 :)에 스팟 - 내가 사용 된 방법 내가 잘못했다 가지고했던 일을 밝혀 두 번째 foreach 루프에서 반환 된 값입니다. 많은 감사합니다! – cmdrbob

0

당신이 필요 Map<String, List<String>>

왼손 사이드 String은 키, 오른쪽 List<String>이 경우에 ListString

입니다 값입니다
3

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 
관련 문제