我有一张地图,其值是整数列表。如果在阅读器中找到密钥,我必须在列表中添加一个整数。我下面的代码每次都有效,除了一个。换句话说,如果密钥存在5次,列表会说它只有4次。我错过了什么?谢谢!
Map<String, List<Integer>> map = new TreeMap<String, List<Integer>>();
String key; // the string from my reader
if (map.containsKey(key)) {
map.get(key).add(value); //value being an integer gotten earlier
}
我的代码在构造函数中将键添加到地图中,如下所示:
while (reader.ready()) {
key = reader.readLine();
if(!key.isEmpty()) {
map.put(key, new ArrayList<Integer>());
}
}
如果找不到密钥,我不需要做任何事情,只需添加值即可。
答案 0 :(得分:0)
您发布的代码段不是您的实际完整代码,但无论如何您需要有逻辑来处理第一次看到密钥。在第一种情况下,您应该初始化要存储在地图中的整数列表。像这样:
public static void addValue(String key, Integer value,
Map<String, List<Integer>> map) {
List<Integer> list = map.get(key);
if (list == null) {
list = new ArrayList<>();
}
list.add(value);
}
public static void main(String[] args) {
Map<String, List<Integer>> map = new TreeMap<String, List<Integer>>();
String key; // the string from my reader
Integer value;
addValue(key, value, map);
}
答案 1 :(得分:0)
如果找不到钥匙,你如何处理?我怀疑如果找不到密钥,你会错过将第一个Integer值添加到列表中。
if (map.containsKey(key)) {
map.get(key).add(value); //value being an integer gotten earlier
} else {
List<Integer> list = new ArrayList<>();
list.add(value); //add value to the list
map.put(key, list);
}
答案 2 :(得分:0)
{{1}}
答案 3 :(得分:0)
你没有提到你想要修改相同的列表,只有它是相同的列表才能使用java 8
map.entrySet().forEach(entry -> {
if ("5" == entry.getKey()) {
((List) entry.getValue()).add(5);
System.out.println(entry.getValue());
}
});