我有一份论文清单,每篇论文都有一组关键字。我想得到一张地图,它会在所有论文中存储关键字和频率的总和。我已实现如下:
public Map<Keyword, Integer> getKeywordFrequencies(List<Integer> userPapers,
Map<Integer, List<PaperKeywordMapping>> paperKeywords) {
Map<Keyword, Integer> frequencies = new HashMap<>();
for (Integer ind : userPapers) {
for (PaperKeywordMapping pKeyword : paperKeywords.get(ind)) {
frequencies.compute(pKeyword.getKeyword(), (k, v) -> {
return v == null ? pKeyword.getTermFrequency() : v + pKeyword.getTermFrequency();
});
}
}
frequencies.forEach((k,v)->System.out.println("keyword : " + k.getKeywordName() + " freq : " + v));
return frequencies;
}
问题在于,我在地图中找不到唯一的键。输出结果如下:
keyword : Nonfiction freq : 60
keyword : Reference freq : 38
keyword : Sports freq : 263
keyword : Arts freq : 90
keyword : Astronomy freq : 50
keyword : Medicine freq : 16
keyword : Applied freq : 31
keyword : History freq : 106
keyword : Discrete freq : 47
keyword : microeconomics freq : 68
keyword : macroeconomics freq : 41
keyword : Nonfiction freq : 99
keyword : Reference freq : 101
keyword : Sports freq : 262
keyword : Arts freq : 126
keyword : Astronomy freq : 58
keyword : Medicine freq : 31
尝试添加检查,如果密钥存在或不存在,但仍然相同。
感谢任何帮助。
答案 0 :(得分:2)
HashMap的唯一键是什么? 它由hashCode和equals方法标识。 要使此属性正常工作,您需要在关键字类中定义这些方法。