如下例子,map列表里面,每个map相同的key的value统计,可以用flatmap将每个list item转为stream再汇到父stream中。
private static class Mapx extends HashMap<String,Integer> {
}
@org.junit.Test
public void testSum(){
Mapx m1=new Mapx();
m1.put("test1",1);
m1.put("test2",2);
m1.put("test3",3);
Mapx m2=new Mapx();
m2.put("test1",2);
m2.put("test2",3);
m2.put("test3",4);
List<Mapx> mapxList=new ArrayList<>();
mapxList.add(m1);
mapxList.add(m2);
Mapx s=new Mapx();
mapxList.forEach(i->{
i.entrySet().forEach(j->{
if (s.keySet().contains(j.getKey())){
s.put(j.getKey(), s.get(j.getKey())+j.getValue());
}
else{
s.put(j.getKey(),j.getValue());
}
});
});
System.out.println(s);
Map<String,Integer> ss=mapxList.stream().flatMap(i->i.entrySet().stream()).collect(Collectors.toMap(i->""+i.getKey(),i->i.getValue()
,Integer::sum));
System.out.println(ss);
}