我有一个映射列表,如果键相等,我想添加值。值也存储为映射。作为输出,我想要一张地图,如下例所示。
我期望输出
[
{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}
}