如何转换Map <integer,list <string =“”>&gt;映射<integer,set <string =“”>&gt; </integer,> </integer,>

时间:2014-05-26 09:31:08

标签: java

Map<Integer, List<String>> mapList = new TreeMap<>();
Map<Integer, Set<String>> mapSet = new TreeMap<>();
        Set<String> set = new TreeSet<>();
        for (Map.Entry<Integer, List<String>> entry : entriesSortedByValues(mapList)) {
            set.addAll(entry.getValue());
            mapSet.put(entry.getKey(), set);
        }

它不起作用。我想将地图列表复制到地图集。

3 个答案:

答案 0 :(得分:4)

您不断为所有键添加和修改相同的对象。

您目前所做的事情可以被视为:

enter image description here

所以要解决这个问题,请在循环的每次迭代中创建一个新的Set。

Map<Integer, List<String>> mapList = new TreeMap<>();
Map<Integer, Set<String>> mapSet = new TreeMap<>();
for (Map.Entry<Integer, List<String>> entry : entriesSortedByValues(mapList)) {
    Set<String> set = new TreeSet<>();
    set.addAll(entry.getValue());
    mapSet.put(entry.getKey(), set);
}

此外,您可以使用将集合作为参数的构造函数。

Map<Integer, List<String>> mapList = new TreeMap<>();
Map<Integer, Set<String>> mapSet = new TreeMap<>();
for (Map.Entry<Integer, List<String>> entry : entriesSortedByValues(mapList)) {
    mapSet.put(entry.getKey(), new TreeSet<>(entry.getValue()));
}

答案 1 :(得分:3)

您可以使用HashSet的构造函数将列表转换为Set,new HashSet<String>(myList);

Map<Integer, List<String>> mapList = new TreeMap<>();
Map<Integer, Set<String>> mapSet = new TreeMap<>();

   for (Map.Entry<Integer, List<String>> entry : entriesSortedByValues(mapList)) {
        Set<String> set = new HashSet<String>(entry.getValue());
        mapSet.put(entry.getKey(), set);
   }

答案 2 :(得分:0)

在for循环中添加Set

    for (Map.Entry<Integer, List<String>> entry : entriesSortedByValues(mapList)) {
        Set<String> set = new TreeSet<>();
        set.addAll(entry.getValue());
        mapSet.put(entry.getKey(), set);
    }