Дублировать значения в Map<DemoType, List <Demography >>
У меня есть некоторые проблемы с этим фрагментом кода.
Я создаю карту со списком демографии, но в какой-то момент у меня есть дубликаты элементов списка. Вы видите, где я делаю ошибку?
С уважением.
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;
}
1 ответ
Прочитайте документацию computeIfAbsent
:
вернуть текущее (существующее или вычисленное) значение, связанное с указанным ключом, или ноль, если вычисленное значение равно нулю
Это:
List<Demography> demosList = demoTypeToDemosMap.computeIfAbsent(mappedDemo.getDemoType(), f -> new ArrayList<>());
вернет новый ArrayList
если ключ не в Map
или существующий, который вы позже просто добавите к нему: demosList.add(demo);