地图中的重复键

时间:2017-06-05 16:26:25

标签: java

我有一份论文清单,每篇论文都有一组关键字。我想得到一张地图,它会在所有论文中存储关键字和频率的总和。我已实现如下:

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

尝试添加检查,如果密钥存在或不存在,但仍然相同。

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

HashMap的唯一键是什么? 它由hashCode和equals方法标识。 要使此属性正常工作,您需要在关键字类中定义这些方法。