Java 8流-每个映射键的数字总和

时间:2018-08-14 13:36:53

标签: java java-8 java-stream reduce

是否有一种简单/优雅的方法来对列表中每个键的列表中的数字求和,例如我想从Map<String, List<BigDecimal>>获得Map<String, BigDecimal>吗?我找不到它/把它弄清楚了...

2 个答案:

答案 0 :(得分:8)

要从Map<String, List<BigDecimal>>更改为Map<String, BigDecimal>,有两个步骤:

第一步:使用Collectors.toMap将旧地图的键移到新地图。

第二步:您必须对List<BigDecimal>的所有元素求和,其中一种方法是使用e.getValue().stream().reduce(BigDecimal.ZERO, BigDecimal::add)

最后,您的代码如下所示:

Map<String, BigDecimal> result = map.entrySet().stream()
        .collect(Collectors.toMap(
                Map.Entry::getKey, 
                e -> e.getValue().stream().reduce(BigDecimal.ZERO, BigDecimal::add))
        );

Ideone example

答案 1 :(得分:2)

$argv