我对这段代码有一些问题。
我正在创建一个包含人口统计列表的 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/