我有一个包含数据的List
VO,比如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));