如何将地图复制到另一个地图

时间:2015-04-26 17:38:07

标签: java dictionary

我有两张地图

Map<String, List<String>> map = new HashMap<>();
Map<Integer, List<String>> newMap = new TreeMap<>();

map中我的密钥是用户年龄。我想按年龄对它们进行分组并复制到newMap。例如:所有10岁以下的年龄组(并将所有值复制到一个列表中)和所有年龄较大的10岁以及20岁以下的年龄段等等。 这是我试图做的事情

for (int m = 10; m <= 80; m += 10) {                            
    for (String key : map.keySet()) {
        List<String> value = new ArrayList<>();
        int age = Integer.parseInt(key);
        if (age <= m) {                     
            if ((value = newMap.get(m)) != null) {
                value.addAll(map.get(key));
                newMap.put(m, value);                           
            } else {
                newMap.put(m, value);

            }
        } else continue;            
    }
}

但是我把年龄作为一个关键词,将null作为值[10 = null; 30 = null 20 = null; ]

2 个答案:

答案 0 :(得分:1)

为什么不迭代entrySet()

for (Map.Entry<String, List<String>> entry : map.entrySet()) {
    // Since integer division is used, we'll lose the "ones" digit
    Integer newKey = Integer.parseInt(entry.getKey()) / 10 * 10;

    List<String> value = newMap.get(newKey) {
    if (value == null) {
        value = new LinkedList<>();
        newMap.put(newKey, value);
    }
    value.addAll(entry.getValue());
}

答案 1 :(得分:1)

我认为Mureinik的答案更好,但是要提供更接近你原来写的东西:

for (int m = 10; m <= 80; m += 10) {
    List<String> value = new ArrayList<>();

    for (String key : map.keySet()) {
        int age = Integer.parseInt(key);

        if (age < m && age >= m - 9) {
            value.addAll(map.get(key));
        }
    }

    newMap.put(m, value);
}