#java #list #stream #maps
#java #Список #поток #Карты
Вопрос:
У меня есть следующие карты:
Map<String,Map<String,Long>> mapOne;
Map<String,Map<String,Long>> mapTwo;
Значения внутри этих карт выглядят примерно так :
{
BMW = {
SIZE=1,
SPEED=60
},
AUDI = {
SIZE=5,
SPEED=21
},
SEAT= {
SPEED=15
}
}
Вторая карта:
{
Suzuki = {
WHEELS_SIZE=2,
DOORS=3
},
AUDI = {
WHEELS_SIZE=5,
DOORS=5
},
SEAT= {
DOORS=4
}
}
Я хочу, чтобы карта после слияния была :
{
BMW = {
SIZE=1,
SPEED=60
},
AUDI = {
SIZE=5,
SPEED=21,
WHEELS_SIZE=5,
DOORS=5
},
SEAT= {
SPEED=15,
DOORS=4
},
Suzuki = {
WHEELS_SIZE=2,
DOORS=3
},
}
Итак, я хочу выполнить слияние и объединить значения дубликатов ключей. Я считаю, что это должно быть что-то вроде этого:
mapTwo.forEach((k, v) -> mapOne.merge(k, v, ..... ));
Ответ №1:
Вы можете написать:
mapTwo.forEach((k, v) -> mapOne.merge(k, v, (v1,v2) -> {
v1.putAll(v2);
return v1;
}));
Это изменит mapOne
, чтобы включить записи mapTwo
, одновременно объединяя внутренние Map
s общих ключей.