我有一个任务,我得到了一个包含文本的文件。该文本是一本书的一部分。我的任务是将该文件传输到我所做的 arraylist、hashmap(其中之一)中。作业的第二部分是从该文件中找到 20 个最常用的单词,并将它们按降序排列。
到目前为止,我将文件中的所有这些单词插入到 hashmap 和 arraylist 中(代码在下面提供),我在不同的方法中完成了这两项工作。 hashmap 方法只返回数字,而 arraylist 只返回最常见的单词,以及重复次数。
所以代码的第一部分将是 hashmap
public void findWords() throws Exception {
// ovde traxim 20 reci koje se najcesce ponavljaju u tekstu
String line;
Integer counter = 0;
FileReader fr = new FileReader("src/Fajl/blab");
BufferedReader br = new BufferedReader(fr);
while ((line = br.readLine()) != null) {
String string[] = line.toLowerCase().split("([,.\\s]+)");
for (String s : string) {
if (hashmap.containsKey(s)) {
counter++;
} else
counter = 1;
hashmap.put(s, counter);
}
}
接下来是按值排序,显示前20个单词的重复次数,从多到少
Collection<Integer> values = mapaKnjiga.values();
ArrayList<Integer> list = new ArrayList<Integer>(values);
Collections.sort(list, Collections.reverseOrder());
for (int i = 0; i < 20; i++)
System.out.println(list.get(i));
}
最佳答案
将单词视为您的 HashMap ,将单词作为键并计为值。
LinkedHashMap<String, Integer> reverseSortedMap = new LinkedHashMap<>();
words.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.forEachOrdered(x -> reverseSortedMap.put(x.getKey(), x.getValue()));
List<String> finalList = reverseSortedMap.entrySet()
.stream()
.map(entry -> entry.getKey())
.limit(20)
.collect(Collectors.toList());
关于java - 如何在 arraylist 中找到前 20 个最常用的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58094563/