Java List> sum of group by of map key

2020-07-24 03:51发布

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?

1条回答
在下西门庆
2楼-- · 2020-07-24 04:06

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));
查看更多
登录 后发表回答