2017-06-05 58 views
-2

我有一系列論文,每篇論文都有一組關鍵字分配給它。我想獲得一張地圖,它將在所有文件中存儲關鍵字和頻率總和。我已經執行如下:地圖中的重複鍵

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

使用Set來保證唯一鍵 – Alfabravo

+1

您的關鍵字對象需要實現適當的equals方法。 – Marvin

+0

@Marvin,實現已經存在。 – Cap

回答

2

什麼是HashMap的唯一鍵? 它由hashCode標識並等於方法。 要讓該屬性正常工作,您需要在Keyword類中定義這些方法。