赞
踩
遇到个需求,就是上两篇那个导出excel延申的:
没错,这几篇是连续剧
话不多说,直接进入主题
上面导出excel后,需要在文档数据末尾新增一行合计,页面的合计是前端自动计算的,导出时候试了下poi,以失败告终,于是就统计数据集合,然后把统计后的值add到list中去,当作数据一并导出。
由于我这个Map里面有25个key,一个一个写太费时间,于是写了个小循环。。。。。。。。
如有别的方法,热烈欢迎大佬指教!!!!
提示:
本文和项目没关系,纯list<Map>根据key汇总的demo
直接上代码
- List<Map<String, Object>> list = Lists.newArrayList();
- Map<String, Object> map1 = Maps.newHashMap();
- Map<String, Object> map2 = Maps.newHashMap();
- Map<String, Object> map3 = Maps.newHashMap();
- map1.put("a", 1);
- map1.put("b", 2);
- map1.put("c", 3);
- map2.put("a", 4);
- map2.put("b", 5);
- map2.put("c", 6);
- map3.put("a", 7);
- map3.put("b", 8);
- map3.put("c", 9);
- map3.put("d", 10);
- list.add(map1);
- list.add(map2);
- list.add(map3);
-
- // 求和后的map
- Map<String, Object> mapSum = Maps.newHashMap();
-
- // 循环list
- list.stream().map(item -> {
- // 遍历MAP
- item.forEach((k, v) -> {
- Object v1 = mapSum.get(k);
- if (v1 == null) {
- mapSum.put(k, v);
- } else {
- // 累加求和
- v1 = new Integer((((Integer) v1).intValue() + ((Integer) v).intValue()));
- mapSum.put(k, v1);
- }
- });
- return mapSum;
- }).collect(Collectors.toList()).get(0);
-
- // 追加mapSum
- list.add(mapSum);
-
- System.out.println(JSONObject.toJSONString(list));
- System.out.println(JSONObject.toJSONString(mapSum));
OK 结束!
有另外的方法请大佬指教!!!
20230214 修改
评论区大佬指点:
Map<String, Integer> result = list.stream() .flatMap(map -> map.entrySet().stream()) .collect(Collectors.groupingBy(Map.Entry::getKey, Collectors.summingInt(Map.Entry::getValue)));
利用flatMap 进行计算,flatMap和map类似,flatMap把嵌套集合,按照子集合的形式,统一放入到新的一个集合中去,扁平化管理,统计的时候就可以一行搞定不用手写for循环
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。