kan*_*ri3 4 java arrays java-8 java-stream
我正在尝试计算已选择的不同文章中关键字的出现次数.我可以在java 7中做到这一点,但在java 8中苦苦挣扎.
结构是这样的.
关键字类
public class Keyword {
private String word;
private int value;
}
Run Code Online (Sandbox Code Playgroud)
文章课
public class Article {
private Set<Keyword> keywordsList;
private boolean selected;
}
Run Code Online (Sandbox Code Playgroud)
我如何计算我有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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我开始做这样的事情.仍在努力,但不确定我是否朝着正确的方向前进:/如果有人能指引我朝着正确的方向前进,那就太棒了!
Map<Keyword,Integer> occurenceMappingBis = articleSetFiltered = articleSet.stream()
.filter(a -> a.isSelected())
.forEach(
article -> article.getKeywordsList()
.stream().collect(Collectors.groupingBy(keyword -> keyword, Collectors.counting()))
);
Run Code Online (Sandbox Code Playgroud)
像这样的东西(我没有编译它,但应该工作).这假定Keyword覆盖hashcode/equals.
articleSet.stream()
.filter(Article::isSelected)
.flatmap(ar -> ar.getKeywordsList().stream())
.collect(Collectors.groupingBy(
Function.identity(),
Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |