我有一个List
个Publication
对象,我想以PublicationKeyword
的形式获取对应每个Publication
的Map<Integer, Map<Keyword, Integer>>
到地图,其中,外部地图的键是的ID。列表中的Publication
,值是一个映射,键是keyword
对象,而integer
是频率。
目前,我正在以这种方式进行操作:
public Map<Integer, Map<Keyword, Integer>> getFrequencies(List<Publication> publications) {
Map<Integer, Map<Keyword, Integer>> resultSet = new HashMap<>();
for (Publication publication : publications) {
Map<Keyword, Integer> frequencyMappings = new HashMap<>();
for (PublicationKeyword pubKeyword : publication.getPublicationKeyword()) {
frequencyMappings.put(pubKeyword.getKeyword(), pubKeyword.getConceptFrequency());
}
resultSet.put(publication.getIdPaper(), frequencyMappings);
}
return resultSet;
}
但是,问题是我想使用Java 8流来实现这一点。有可能做到吗?如果是,执行此操作的正确方法是什么?使我感到困惑的事情是:嵌套的for循环和for内部的变量声明。
最佳答案
应该这样做:
return publications.stream()
.collect(Collectors.toMap(
Publication::getIdPaper,
publication -> publication.getPublicationKeyword()
.stream()
.collect(Collectors.toMap(
PublicationKeyword::getKeyword,
PublicationKeyword::getConceptFrequency))));