Java - 将列表转换为映射并在内部合并重复的关键数据



我有一个包含数据的ListVO,比如DataVO

DataVO 1: 1, abcd, efgh
DataVO 2: 1, pqrs, wxyz
DataVO 3: 2, hello, letsgo

我想创建一个Map,键作为第一个元素,List作为值。

Map<Integer, List<DataVO>> myDataMap

所以内容会像:

CCD_ 5是包含CCD_;1, pqrs, wxyz

myDataMap.get(2)是包含2, hello, letsgo的列表

现在我是这样做的:

Map<Integer, List<DataVO>> myDataMap = new HashMap<>();
dataVoList.forEach(dataVo -> {
int id = dataVo.getId();
if (myDataMap.containsKey(id)) {
myDataMap.get(id).add(dataVo);
} else {
myDataMap.put(id, new ArrayList<>(Arrays.asList(dataVo)));
}
});

如何对此进行优化?

我厌倦了使用流,像这样:

dataVoList.stream().collect(toMap(Data::id, ....));

但它给出了重复密钥错误。

若我使用merge属性,那个么它只保留一个元素。(如本文所述(

请提出建议。

使用groupingBy:

Map<Integer, List<DataVO>> myDataMap =
dataVoList.stream()
.collect(Collectors.groupingBy(DataVO::getId));

最新更新