2012-10-08 45 views
1

我试图将键和值从一个地图map1复制到另一个地图map2中。地图1中的值存储在一个集合中,地图2应将map1的值存储在列表中。每个中的键都应该映射两个地图中的相同。将键和值从一张地图复制到另一张地图

我可以通过map1中的键循环,然后将这些键添加到地图2.并有另一个内部for循环将每个集合的元素添加到map2的列表中,但我不确定这是否是正确的方式关于它,甚至是正确的。

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迭代,并使用new ArrayList(Collections)构造函数来创建一个列表出存储在原有地图的Set的。而把它变成新的地图..

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

呐喊nvm。很棒。谢谢。 – nitiger

+0

@nitiger ..欢迎您:) –

相关问题