java - 如何在 arraylist 中找到前 20 个最常用的单词

标签 java sorting arraylist hashmap

我有一个任务,我得到了一个包含文本的文件。该文本是一本书的一部分。我的任务是将该文件传输到我所做的 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/

相关文章:

java - JFreeChart 甘特图根据描述为子任务绘制不同的颜色

java - 在 SQL 数据库中存储时间戳

java - 如何将 JButton 放置在带有图像的 JLabel 上?

java - php中的RSA加密到JAva中的RSA解密

Java:Arrays.sort 快速排序和归并排序

c++ - 此排序数组代码导致最后一个元素消失

java - 为什么我的ArrayList包含添加到列表中的最后一项的N个副本?

javascript - 先按字母排序,再按数字排序

java - 迭代器,当 hasNext() 等于 false 时做一些事情

Java高效存储大量排序数据