计算多篇文章中的关键字出现次数

时间:2017-09-14 14:02:06

标签: java arrays java-8 java-stream

我试图计算已选择的不同文章中关键字的出现次数。 我可以在java 7中做到这一点,但在java 8中苦苦挣扎。

结构是这样的。

关键字类

public class Keyword {

    private String word;
    private int value;
}

文章课

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

我如何计算我有A,B,C等的时间。关键字

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);
            }
        }
    }

我开始做这样的事情。仍然在努力,但不确定我是否朝着正确的方向前进:/如果有人能指引我朝着正确的方向前进,那就太棒了!

 Map<Keyword,Integer> occurenceMappingBis = articleSetFiltered = articleSet.stream()
            .filter(a -> a.isSelected())
            .forEach(
            article -> article.getKeywordsList()
                    .stream().collect(Collectors.groupingBy(keyword -> keyword, Collectors.counting()))
    );

1 个答案:

答案 0 :(得分:5)

像这样(我没有编译它,但应该工作)。这假定Keyword会覆盖hashcode/equals

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