我有两张地图
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; ]
答案 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);
}