2017-09-14 33 views
4

私は、選択された別の記事のキーワードの出現数をカウントしようとしています。 私はこれをJava 7で実行できますが、Java 8では苦労しています。複数の記事にキーワードの出現数をカウントする

構造は次のとおりです。

キーワードクラス

public class Keyword { 

    private String word; 
    private int value; 
} 

条クラス私はA、B、C、...などを持っている時間数を数える方法

public class Article { 
    private Set<Keyword> keywordsList; 
    private boolean selected; 
} 

。キーワード

Map<Keyword,Integer> occurrenceMapping = new HashMap<>(); 

final Set<Article> articleSetFiltered = articleSet.stream() 
      .filter(a -> a.isSelected()) 
      .collect(Collectors.toSet()); 

    for(Article a : articleSetFiltered) { 
     for(Keyword k : a.getKeywordsList()) { 
      if(!occurrenceMapping.containsKey(k)) { 
       occurrenceMapping.put(k,1); 
      } 
      else{ 
       final int occurrence = occurrenceMapping.get(k); 
       occurrenceMapping.put(k,occurrence+1); 
      } 
     } 
    } 

このようなことをやり始めました。まだそれを回避していますが、私は良い方向に進むと確信していません:/誰かが正しい方向に私を指示することができれば、それは素晴らしいだろう!

答えて

5

(私はそれをコンパイルしていませんが、動作するはずです)。これは、の上書きhashcode/equalsを前提としています。

articleSet.stream() 
      .filter(Article::isSelected) 
      .flatmap(ar -> ar.getKeywordsList().stream()) 
      .collect(Collectors.groupingBy(
        Function.identity(), 
        Collectors.counting())); 
+0

キーワードは、hashcode/equalsメソッドをオーバーライドします。ありがとう。私はそれを試してみましょう – kanadianDri3

関連する問題