在多篇文章中统计关键词出现次数

4

我正在尝试在已选文章中计算关键词的出现次数。我可以在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个回答

5

以下是类似的示例代码(尚未编译,但应该可以工作)。假设Keyword覆盖了hashcode/equals方法。

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

关键字不会覆盖HashCode/Equals方法。谢谢,我会尝试的。 - kanadianDri3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接