Ich habe eine Sammlung von Karten:wie eine Sammlung von Karten fusionieren Streams mit
Collection<Map<String,Double>> myCol = table.values();
Ich mag diese in eine Karte
Map<String, Double>
, so dass für einen passenden Schlüssel zu transformieren, Werte werden aufsummiert. Mit einem for-Schleife ist es ziemlich einfach:
Map<String, Double> outMap = new HashMap<>();
for (Map<String, Double> map : myCol) {
outMap = mergeMaps(outMap, map);
}
und mergeMaps()
als
mergeMaps(Map<String, Double> m1, Map<String, Double> m2){
Map<String, Double> outMap = new TreeMap<>(m1);
m2.forEach((k,v) -> outMap.merge(k,v,Double::sum)); /*sum values if key exists*/
return outMap;
}
Allerdings würde Ich mag Strom verwenden, um eine Karte aus der Sammlung zu bekommen. Ich habe es wie folgt versucht:
Map<String, Double> outMap = new HashMap<>();
myCol.stream().forEach(e-> outMap.putAll(mergeMaps(outMap,e)));
return outMap;
Dies funktioniert ohne ein Problem. Kann ich es trotzdem verbessern? Ich meine, wie kann ich Sammler darin verwenden?
wahrscheinlich, etwas ähnlich -> https://stackoverflow.com/questions/34325389/java-listmapstring-long-sum-of-group-by-of-map-key – novice