2017-06-05 5 views
-2

私は論文のリストを持っており、各論文にはキーワードが割り当てられています。私はすべての論文にその頻度のキーワードと総計を格納するMapを取得したいと思います。私は次のように実装しました:地図の重複キー

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

一意のキーを保証するためにセットを使用 – Alfabravo

+1

キーワードオブジェクトは適切な 'equals'メソッドを実装する必要があります。 – Marvin

+0

@Marvin、実装は既にあります。 – Cap

答えて

2

HashMapのユニークなキーは何ですか? これはhashCodeとequalsメソッドによって識別されます。 このプロパティを正しく機能させるには、Keywordクラスでこれらのメソッドを定義する必要があります。