我需要检查 Map 中是否已经存在添加值并将值添加到 Map 中的整数列表

I need to check whether adding value already exists in Map and add values to list of integers in Map

我需要创建一个以字符串作为键并以整数列表作为值的映射。我已经创建了地图,我创建了从 txt 文件中获取的单词的标记化。现在我正在尝试将键和值放入地图中,但我仍然收到错误。我想知道也许我的地图创建有误,但我没有看到创建此地图的任何其他方法。

我一直在尝试用"put"函数添加这个地图,这样我什至无法编译这个程序

Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();
        //Map<String, Integer> map = new HashMap<String, Integer>();    
        int numberOfFiles;
        File directory = new File("C:/Users/User/Desktop/documents java project/");
        numberOfFiles = directory.list().length;


        for(int i = 1; i <= numberOfFiles; i++) {
            //tokenization of string
            String filePath = "C:/Users/User/Desktop/documents java project/document "+ i +".txt";
            String fileData = readFile(filePath);
            String delimiter = " ";
            String fileWords [] = fileData.split(delimiter);
            //words.add(fileWords);
            int numberOfWords = fileWords.length;

            for(int j = 0; j < numberOfWords; j++) {

                map.put(fileWords[j], i);

            }
        }
}

您的 Map 期望值是 List<Integer> 但您试图将 int 放入其中:

map.put(fileWords[j], i);

相反,您需要创建一个 List<Integer> 并将其作为值,例如:

if (!map.containsKey(fileWords[j])) {
    map.put(fileWords[j], new ArrayList<>());
}
map.get(fileWords[j]).add(i);

这会向您的 Map 添加一个新的空 List(如果它尚不存在),然后它会将 i 的值添加到列表中。如果它已经存在,它只会将 i 添加到已经存在的列表中。

如果以上内容对您来说太罗嗦了,也可以用 Map.computeIfAbsent() 来完成:

map.computeIfAbsent(fileWords[j], k -> new ArrayList<>()).add(i);

如果您不想存储重复项,可以改用 Set。将您的声明更改为:

Map<String, Set<Integer>> map = new HashMap<>();

稍后,添加项目:

map.computeIfAbsent(fileWords[j], k -> new HashSet<>()).add(i);