java使用stream做二维数据统计,把List<Map>转换为Map<String,Map<String,Integer>>
1.首先通过数据库等方式获取要统计二维的数据,示例如下:
date (一维) |
area(二维) |
count |
2018/11/11 | EN | 1 |
2018/11/11 | US | 5 |
2018/11/12 | EN | 3 |
2018/11/12 | US | 2 |
2018/11/12 | US | 2 |
2.数量统计
//主要用到了Collectors.groupingBy方法进行分组,方法最后一个参数可以对分组后的数据继续操作,这样通过嵌套的方式就可以生成多维统计数据
//使用了LinkedHashMap保证数据有序
Map<String,Map<String,Integer>> result = list.stream().
collect(Collectors.groupingBy(e->e.get("date"),LinkedHashMap::new,
Collectors.groupingBy(e->e.get("area"),LinkedHashMap::new,
Collectors.summingInt(e->Integer.parseInt(e.get("count"))))));
3.执行后的结果为:
<String,<String,Integer>>
2018/11/11,EN,1
US,5
2018/11/12,EN,3
US,4