java - 将值复制到 Map<DemoType, List<Demography>>

标签 java java-8 enum-map

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

我正在创建一个包含人口统计列表的 map ,但在某些时候我有重复的列表元素。你能看出我哪里做错了吗?

问候。

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

最佳答案

阅读computeIfAbsent的文档:

return the current (existing or computed) value associated with the specified key, or null if the computed value is null

这个:

List<Demography> demosList = demoTypeToDemosMap.computeIfAbsent(mappedDemo.getDemoType(), f -> new ArrayList<>());
如果键不在 Map 或现有的键中,

将返回一个新的 ArrayList,您稍后只需将其添加到其中即可: demosList.add(demo);

关于java - 将值复制到 Map<DemoType, List<Demography>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52016944/

相关文章:

java - 在 Java 中创建带注释的对象时收到通知

Java SE 嵌入式和 Java ME

java - 如何使用 Java 8 中的比较器按参数对流进行排序?

java - 具有并发 put/get 的 EnumMap

java - EnumMap.containsValue(null) 返回真 JDK 7

java - 从 Java 访问 Servlet Response 时出现 NullPointerException

java - 使用 uCanAccess 驱动程序将字符串发送到 MS Access DB 时出现无效的字符值转换错误

java - 使用参数在对象上调用非静态方法引用

java - 代码说明: Enum and Rendering

java - 编程最佳实践 : to initialize or not to