Je voudrais convertir un Map>
en un Map
en utilisant des Stream
.
Voici le hic (et pourquoi je n'arrive pas à le résoudre):
Je voudrais regrouper mes valeurs entières par les valeurs clés des maps correspondantes. Ainsi, pour clarifier :
J'ai des entrées comme celles-ci :
Entrée 1: ["A",["a",1]]
Entrée 2: ["B",["a",2]]
Entrée 3: ["B",["b",5]]
Entrée 4: ["A",["b",0]]
Je souhaite convertir cette structure en ce qui suit :
Entrée 1: ["a",3]
Entrée 2: ["b",5]
Je pense qu'avec la classe Collectors
et les méthodes comme summingInt
et groupingBy
, vous devriez être en mesure d'accomplir cela. Cependant, je n'arrive pas à trouver la bonne méthode pour y parvenir.
Il convient de noter que toutes les Map
internes sont garanties d'avoir toujours les mêmes clés, soit avec des valeurs Integer
0 ou > 0. (par exemple, "A" et "B" auront toujours les mêmes 5 clés l'une que l'autre) Tout ce que j'ai essayé jusqu'à maintenant n'a pas vraiment abouti à grand-chose. Je suis conscient que, s'il n'y avait pas la partie de la sommation, je pourrais procéder comme ceci :
Map map2 = new HashMap();
map1.values().stream().forEach(map -> {
map2.putAll(map.entrySet().stream().collect(Collectors.toMap(entry -> entry.getKey(), entry -> entry.getValue())));
});
Mais comment ajouter la partie de la sommation ?