正确填充地图中的列表

时间:2017-04-16 04:07:34

标签: java arraylist

我有一张地图,其值是整数列表。如果在阅读器中找到密钥,我必须在列表中添加一个整数。我下面的代码每次都有效,除了一个。换句话说,如果密钥存在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>());
    }
}    

如果找不到密钥,我不需要做任何事情,只需添加值即可。

4 个答案:

答案 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());
        }
});