【发布时间】:2019-02-10 09:32:20
【问题描述】:
我有一个班级价值观:
public class Values {
private int count;
private int values;
}
以及Map<String, Values>类型的多个映射列表
Map<String, Values> map1 = new HashMap<>();
map1 .put("aaa", new Values(1, 10));
map1 .put("bbb", new Values(5, 50));
map1 .put("ccc", new Values(2, 30));
Map<String, Values> map2= new HashMap<>();
map2.put("aaa", new Values(2, 20));
map2.put("bbb", new Values(3, 50));
map2.put("ccc", new Values(3, 10));
List<Map<String, Values>> list = Arrays.asList(map1, map2);
地图中可以有任意数量的地图和任意数量的条目,但地图的键始终相同,只有值可以不同。为了清楚起见,我的示例仅包含 2 个地图,并且每个地图仅包含 3 个条目。
我想获得一个具有相同键的单个映射,并将 Values 对象作为对象中每个“计数”和每个“值”的总和,如下所示:
{
aaa= {
count = 3,
value = 30
},
bbb= {
count = 8,
value = 100
},
ccc= {
count = 6,
value = 40
}
}
我正在尝试使用 Streams API 来实现这一点,但我被卡住了:
public static Map<String, Values> mergeMaps(List<Map<String, Values>> maps) {
return maps.stream()
.flatMap(m -> m.entrySet().stream()) ...?
}
如何按每个条目的键对每个条目进行分组并将每个计数和每个值添加到单个映射中?
提前谢谢你。
【问题讨论】:
标签: java java-8 java-stream