如何在具有相同键的哈希图中添加值,以及何时将值存储为另一个哈希图



我有一个映射列表,如果键相等,我想添加值。值也存储为映射。作为输出,我想要一张地图,如下例所示。

我期望输出

[
{user1={service1=10.24, service2=0.11, service3=18.76}}, 
{user1={service1=200.25, service2=0.05, service4=0.00}}
{user2={service1=50.25, service4=0.05, service5=0.00}}
]

要成为

{
user1={service1=210.49, service2=0.16, service3=18.76, service4=0.00},
user2={service1=50.25, service4=0.05, service6=0.00}
}

它是不同收集器的组合:

Map<String, Map<String, Double>> map = list.stream()
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.flatMapping(m -> m.getValue().entrySet().stream(),
Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, Double::sum))));

例:

List<Map<String, Map<String, Double>>> list = List.of(
Map.of("user1", Map.of("service1", 10.24, "service2", 0.11, "service3", 18.76)),
Map.of("user1", Map.of("service1", 200.25, "service2", 0.05, "service3", 0.0)),
Map.of("user2", Map.of("service1", 50.25, "service2", 0.05, "service3", 0.0))
);

将产生

{
user1={service2=0.16, service1=210.49, service3=18.76}, 
user2={service2=0.05, service1=50.25, service3=0.0}
}

最新更新