Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java List<Map<String, Long>> sum of group by of map key

I have a: List<Map<String, Long>> items = new ArrayList<>();

I would like to get a Map in which the key is grouped by, and the value is the sum.

Example: List

  • Item 0
    • foo -> 1
    • bar -> 2
  • Item 1
    • foo -> 4
    • bar -> 3

Result: Map

  • foo -> 5
  • bar -> 5

I know how to do this the "long" way, but was trying to discover a lambda/streaming/groupby approach using the java 8 features. any thoughts?

like image 957
Obscured Avatar asked Oct 29 '25 08:10

Obscured


1 Answers

You can use groupingBy collector:

import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.summingLong;

items.stream()
        .flatMap(m -> m.entrySet().stream())
        .collect(groupingBy(Map.Entry::getKey, summingLong(Map.Entry::getValue)));

Or you can use toMap:

import static java.util.stream.Collectors.toMap;

items.stream()
        .flatMap(m -> m.entrySet().stream())
        .collect(toMap(Map.Entry::getKey, Map.Entry::getValue, Long::sum));
like image 139
Misha Avatar answered Oct 31 '25 00:10

Misha



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!