У меня 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
Таким образом, содержимое будет таким:
myDataMap.get(1)
- это список, содержащий 1, abcd, efgh
& 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, ....));
Но это дает ошибку дублирования ключа.
И если я использую атрибут слияния, то сохраняется только один элемент. (Как объяснено здесь )
Пожалуйста, предложите.