Ввод: у меня есть список карт (ключ - значение пары) и группировка ключей
Например, List<Map<String,String>> inputData
JSON
[
{
'a': 'German',
'b': 'Audi',
'e': 'T3'
},
{
'a': 'German',
'b': 'BMW',
'c': 'T6'
},
{
'a': 'American',
'b': 'Tesla',
'c': 'T6'
}
]
и groupingKeys = a and b
Для ключа группировки a -> я создам два сегмента, один для немецкого и другого американского, и в каждом блоке я снова создаю сегмент для значения b, проверьте следующее
Я хочу произвести следующее: Map<String, Map<String, List<Map>>
- вложенность карт == количество ключей группировки, здесь это 2
{
German: {
Audi: [
{
'a': 'German',
'b': 'Audi',
'e': 'T3'
}
],
BMW: [
{
'a': 'German',
'b': 'BMW',
'c': 'T6'
}
]
},
American: {
Tesla: [
{
'a': 'American',
'b': 'Tesla',
'c': 'T6'
}
]
}
}
То, что я пытался:
inputData.stream().collect(Collectors.groupingBy(mapItem -> this.constructGroupingKey(groupingKeys, mapItem)));
//constructGroupingKey - this joins the values of of given grouping keys
Таким образом, я могу создать составной ключ, например, German-Audi или German-BMW и сохранить соответствующий элемент, но это не то, что я хочу точно.
Как @Naman сказал здесь о конкретном классе - следующий делает его одним вкладышем, но я не могу делать предположения о данных, это тип Map
Map<String, Map<String, List<ConcreteClass>>> output = inputData.stream().collect(Collectors.groupingBy(ConcreteClass::getCountry, Collectors.groupingBy(ConcreteClass::getCarType)));
Буду признателен за другие идеи, спасибо. Мне также любопытно, могу ли я получить группировку на основе данных без указания ключей группировки.
Ввод имеет динамический характер, ключ и значение определяются вводом