我需要检查 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);
我需要创建一个以字符串作为键并以整数列表作为值的映射。我已经创建了地图,我创建了从 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);