Comparable与Comparator (2)——统计单词频率

Comparable与Comparator (1) 中记录了Comparator的基本用法。为了加深印象,这里写了个统计单词出现频率的demo。主要用到HashMap、Comparator比较器以及正则表达式的一些知识。使用比较器的目的是按单词出现的频次,由高到低对HashMap进行排序,便于观察结果。


一、具体代码

import java.util.*;

public class test {
    public static void main(String[] args) {
        final String speech = "It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light, it was the season of Darkness, it was the spring of hope, it was the winter of despair, we had everything before us, we had nothing before us, we were all going direct to Heaven, we were all going direct the other way—in short, the period was so far like the present period, that some of its noisiest authorities insisted on its being received, for good or for evil, in the superlative degree of comparison only.";
        wordFrequencySort(speech);
    }

    public static void wordFrequencySort(String speech) {
        // Regex, split by non-word
        String[] strArr = speech.split("\\W+");  
        Map<String, Integer> map = new HashMap<>(speech.length());
        for (String s : strArr) {
            if (map.containsKey(s)) {
                map.put(s, map.get(s) + 1);
            } else {
                map.put(s, 1);
            }
        }
		
        List<Map.Entry<String, Integer>> entryList = new ArrayList<>(map.entrySet());
        Collections.sort(entryList, new valueComp());

        // display the results according to the word frequency
        for (Map.Entry<String, Integer> entry : entryList) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

// customize our comparator
class valueComp implements Comparator<Map.Entry<String, Integer>> {
    @Override
    public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
        return o2.getValue() - o1.getValue();
    }
}

二、统计结果

posted @ 2021-01-03 22:10  Maverickos  阅读(90)  评论(0编辑  收藏  举报