策码奔腾

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

 

 

 

posted @ 2021-05-28 18:00  策码奔腾  阅读(1008)  评论(0编辑  收藏  举报
console.log('欢迎');