J'ai deux problèmes que je n'arrive pas à résoudre. Le premier est que j'ai besoin d'un moyen d'avoir des groupes imbriqués dynamiques par lesquels il pourrait y avoir 1-n groupes imbriqués que l'utilisateur peut passer.
Le deuxième problème est que j'ai besoin que les résultats soient aplatis et que les clés soient concatées plutôt qu'imbriquées.
Mon exemple d'entrée ressemble à ceci :
List<Map<String, String>> fakeData = new LinkedList<>();
Map<String, String> data1 = new HashMap<>();
data1.put("ip","10.0.1.0");
data1.put("uid","root");
data1.put("group","admin");
fakeData.add(data1);
Map<String, String> data2 = new HashMap<>();
data2.put("ip","10.0.1.1");
data2.put("uid","tiger");
data2.put("group","user");
fakeData.add(data2);
Map<String, String> data3 = new HashMap<>();
data3.put("ip","10.0.1.1");
data3.put("uid","woods");
data3.put("group","user");
fakeData.add(data3);
Le résultat final est un concat des clés de la carte :
{
"10.0.1.1user": [
{
"uid": "tiger",
"ip": "10.0.1.1",
"group": "user"
},
{
"uid": "woods",
"ip": "10.0.1.1",
"group": "user"
}
],
"10.0.1.0admin": [
"uid": "root",
"ip": "10.0.1.0",
"group": "admin"
]
}
Remarquez que les clés sont concatées plutôt que des cartes imbriquées les unes dans les autres.
J'essaie de créer un groupingby où il peut être dynamique, mais sans succès :
fakeData.stream()
.collect(groupingBy(map -> map.get("ip"),
groupingBy(map -> map.get("uuid"),
... nested "n" times)));
Voici l'interface que j'essaie de mettre en œuvre :
public Map<String, List<Map<String, String>>> doGrouping(List<String> columns,
List<Map<String, String>> data);