1

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

我可以遍历 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());

}

我还没有编译或测试它。无法访问计算机。

4

1 回答 1

1

您可以遍历Map并使用new ArrayList(Collections)构造函数从存储在原始 Map 中的 List 创建一个 List Set..并将其放入 new Map ..

    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));
    }
}
于 2012-10-08T08:28:11.600 回答