利用java的hashmap内置的函数merge,可以一句话实现:如果存在,则加1;如果不存在,则新建该对,并把初值设置为1。
1 2 3 4 5 6 7 8 9 10 11
| private static Integer addOne(Integer value) { return value+1; } public static void main(String[] args) { HashMap<String, Integer> te1=new HashMap<String, Integer>(); te1.put("age", 11); System.out.println(te1.merge("age", 1, (value, newValue)->addOne(value))); System.out.println(te1.merge("aegrt", 1, (value, newValue)->addOne(value))); System.out.println(te1.get("age")); System.out.println(te1.get("aegrt")); }
|
结果如下:
通过简单的改动,可以把很多的hashmap进行合并,合并成一个hashmap,即统计总的词频:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| private Integer add(Integer value, Integer addNum) { return value + addNum; }
...... for (AnalReview analReview : reviews) { HashMap<String, Integer> revFreq = analReview.getFrequency(); Iterator iter = revFreq.entrySet().iterator(); while (iter.hasNext()) { HashMap.Entry entry = (HashMap.Entry) iter.next(); String string = (String) entry.getKey(); Integer sfre = (Integer) entry.getValue(); frequency.merge(string, sfre, (value, newValue) -> add(value, sfre)); } }
|
这个功能就像python里的一行代码一样:counts[word]=counts.get(word,0)+1
其中counts是字典