2012-10-08 3 views
1

한 맵에서 map1 키와 값을 다른 맵 map2로 복사하려고합니다. 지도 1의 값은 집합에 저장되고지도 2는 map1의 ​​값을 목록에 저장해야합니다. 각각의 키는 두 맵에서 동일하게 맵핑되어야합니다.한 맵에서 다른 맵으로 키와 값 복사하기

지도 1의 키를 반복하여지도 2에 해당 키를 추가 할 수 있습니다. 그리고 map2의 목록에 각 세트의 요소를 추가하는 또 다른 inner for 루프가 있지만 이것이 올바른 방법인지 확실하지 않습니다. 그것에 대해, 또는 심지어 정확합니다.

public static <K, V> void changeSetToList (Map<K, Set<V>> map1, Map<K, List<V>> map2) { 
for (Map.entry<K, Set<V>> entry : m1.keys()) 
    for (List<V> l : m1.values()) 
     m2.put(entry.getKey(), l.getValue()); 

}

내가 컴파일 또는 아직 불구하고 그것을 테스트하지 않았습니다. 컴퓨터에 액세스 할 수 없습니다.

+0

공유 일부 코드 – Anshu

+0

당신은이 문제에 대해 분명히 할 필요가있다. 문제는 집합에서지도로 데이터를 복사하는 것입니다. 중요한 정보는 실행 컨텍스트와 디자인 결정입니다. 왜지도를 복사할까요? 세트가 이미 채워져 있습니까? 완전한 세트를 반복 할 수 있다면 왜 데이터를지도에 복사하고 싶습니까? –

+0

map2.putAll (map1)을 사용해 보셨습니까? – user902383

답변

1

당신은 Map을 반복하고 원래의지도에 저장된 Set 밖으로 목록을 만들 수 new ArrayList(Collections) 생성자를 사용 ... 그리고 새로운지도에 넣어 수 있습니다 ..

Map<String, Set<String>> givenMap = new HashMap<String, Set<String>>(); 
    Map<String, List<String>> newMap = new HashMap<String, List<String>>(); 

    Set<String> newSet = new HashSet<String>(); 
    newSet.add("rohit"); 

    givenMap.put("a", newSet); 
    givenMap.put("b", newSet); 
    givenMap.put("c", newSet); 

    for (String str: givenMap.keySet()) { 
     newMap.put(str, new ArrayList<String>(givenMap.get(str))); 
    } 

    for(String str:newMap.keySet()) { 
     System.out.println(newMap.get(str)); 
    } 

을 그리고 당신은 사용하려는 경우 제네릭 메서드 .. 당신이 당신의 방법을 변경해야합니다 -

public static <K, V> void changeSetToList (Map<K, Set<V>> givenMap, 
     Map<K, List<V>> newMap) { 

    for (K str: givenMap.keySet()) { 
     newMap.put(str, new ArrayList<V>(givenMap.get(str))); 
    } 

    for(K str:newMap.keySet()) { 
     System.out.println(newMap.get(str)); 
    } 
} 
+0

Whoop nvm. 훌륭하게 작동합니다. 감사. – nitiger

+0

@nitiger .. 너 환영합니다 :) –

관련 문제