1

我对这段代码有一些问题。

我正在使用人口统计列表创建地图,但在某些时候我有重复的列表元素。你能看出我在哪里做错了吗?

问候。

public Map<DemoType, List<Demography>> demoTypeToDemosList(final Long campaignId, final MediaType mediaType) {
        List<MappedDemoDTO> mappedDemosList = demoTypeCampaignService.getMappedDemosByMediaTypeAndCampaignIdOrderByOrdinalRankAsc(mediaType, campaignId);

        final Set<Long> demoIds = mappedDemosList.stream().map(MappedDemoDTO::getMappedId).collect(Collectors.toSet());
        DemographyProviderService serviceByProviderAndMediaType = demographyFactory.getServiceByProviderAndMediaType(Provider.PROVIDER, mediaType);
        final List<Demo> demos = serviceByProviderAndMediaType.getDemoByExternalIds(demoIds);

        Map<DemoType, List<Demography>> demoTypeToDemosMap = new EnumMap<>(DemoType.class);

        mappedDemosList.forEach(mappedDemo -> demos.stream()
            .filter(demo -> mappedDemo.getMappedId().equals(demo.getId()))
            .findFirst()
            .ifPresent(demo -> {
                List<Demography> demosList = demoTypeToDemosMap.computeIfAbsent(mappedDemo.getDemoType(), f -> new ArrayList<>());
                demo.setId(mappedDemo.getDemoId());
                demosList.add(demo);
            }));

        return demoTypeToDemosMap;
    }
4

1 回答 1

1

阅读以下文档computeIfAbsent

返回与指定键关联的当前(现有或计算)值,如果计算值为 null,则返回 null

这个:

List<Demography> demosList = demoTypeToDemosMap.computeIfAbsent(mappedDemo.getDemoType(), f -> new ArrayList<>());

ArrayList如果密钥不在Map 或现有的密钥中,将返回一个新的,您稍后只需将其添加到其中:demosList.add(demo);

于 2018-08-25T11:46:48.933 回答