У меня есть Map<String, List<String>>
, и мне нужно преобразовать его в Map<String, List<Map<String, String>>>
с помощью лямбды. Используя обычный цикл for, эта проблема тривиальна, но я хочу решить ее, используя лямбда-выражения java8.
categoryToSubCat
имеет тип <String, List<String>>
.
Использование для циклов это преобразование:
final Map < String, List < Map < String, String >>> transformedMap = new HashMap < > ();
for (Map.Entry < String, List < String >> entry: categoryToSubCat.entrySet()) {
final List < Map < String, String >> subCats = new ArrayList < > ();
for (String subCat: entry.getValue()) {
final Map < String, String > data = new HashMap < > ();
data.put("text", subCat);
data.put("value", subCat);
subCats.add(data);
}
transformedMap.put(entry.getKey(), subCats);
}
Исходная карта содержит такие данные, как:
{
"CAT1": [
"CAT1-A",
"CAT1-B"
],
"CAT2": [
"CAT2-A",
"CAT2-B",
"CAT2-C"
]
}
После преобразования оно должно стать чем-то вроде
{
"CAT1": [
{
"text": "CAT1-A",
"value": "CAT1-A"
},
{
"text": "CAT1-B",
"value": "CAT1-B"
}
],
"CAT2": [
{
"text": "CAT2-A",
"value": "CAT2-A"
},
{
"text": "CAT2-B",
"value": "CAT2-B"
},
{
"text": "CAT2-C",
"value": "CAT2-C"
}
]
}
Это не похоже на проблему, которую нельзя решить с помощью лямбды, но я просто могу понять, как с этим справиться.
Пожалуйста, предложите лучший подход, чем цикл for.