我有一个ListPublication对象,我想以PublicationKeyword的形式获取对应每个PublicationMap<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))));

09-26 11:44