【问题标题】:Duplicate values into Map<DemoType, List<Demography>>将值复制到 Map<DemoType, List<Demography>>
【发布时间】:2018-08-25 11:39:57
【问题描述】:

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

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

问候。

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;
    }

【问题讨论】:

  • 我只是在调试中浪费了很多时间,我看不到我在哪里做错了
  • getMappedDemosByMediaTypeAndCampaignIdOrderByOrdinalRankAsc ... 认真的吗?

标签: java java-8 enum-map


【解决方案1】:

阅读computeIfAbsent的文档:

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

这个:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-22
    • 2017-07-14
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多