java字符串列表中的单词频率
我有一个字符串列表:
List<String> terms = ["Coding is great", "Search Engines are great", "Google is a nice search engine"]
如何获取列表中每个单词的频率:
例如{Coding:1, Search:2, Engines:1, engine:1, ....}
这是我的密码:
Map<String, Integer> wordFreqMap = new HashMap<>();
for (String contextTerm : term.getContexTerms() )
{
String[] wordsArr = contextTerm.split(" ");
for (String word : wordsArr)
{
Integer freq = wordFreqMap.get(word); //this line is getting reset every time I goto a new COntexTerm
freq = (freq == null) ? 1: ++freq;
wordFreqMap.put(word, freq);
}
}
# 1 楼答案
# 2 楼答案
使用Java 8流的惯用解决方案:
请注意,您可能需要考虑字符串的大小写是否应该发挥作用。这一个将字符串转换为小写,并将其用作最终贴图的键。结果是:
# 3 楼答案
因为Java 8的答案虽然很好,但没有向您展示如何在Java 7中进行并行(除了默认实现之外,与
stream
相同),下面是一个示例:是的,Java8简化了工作
没有,我测试过它,但不知道它是否比简单的循环好,也不知道它是否完全线程安全
(看看你如何定义你的列表,你不是在Groovy中编码吗?Groovy中有并行性支持)