zoukankan      html  css  js  c++  java
  • JDK8:Lambda根据 单个字段、多个字段,分组求和

    使用lambda表达式分别 根据 单个字段、多个字段,分组求和

    示意图:

     1、根据 单个字段,分组求和:根据2019这个字段,计算一个list集合里,同属于2019的某个字段累加和

     2、根据 多个字段,分组求和:

      (1)先根据2019这个字段,再根据1这个字段,计算一个list集合里,同属于2019和1的某个字段累加和;

      (2)先根据2019这个字段,再根据2这个字段,计算一个list集合里,同属于2019和2的某个字段累加和;

    代码如下:

    import com.pojo.DataStatisticsResultMiddle;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.LongSummaryStatistics;
    import java.util.Map;
    import java.util.stream.Collectors;
    
    public class Test {
    
        public static void main(String[] args) {
    
            List<DataStatisticsResultMiddle> li = new ArrayList<>();
            DataStatisticsResultMiddle middle1 = new DataStatisticsResultMiddle();
            middle1.setDatas("2019");
            middle1.setCarrierid("1");
            middle1.setEnusers(100L);
            DataStatisticsResultMiddle middle2 = new DataStatisticsResultMiddle();
            middle2.setDatas("2019");
            middle2.setCarrierid("1");
            middle2.setEnusers(150L);
            DataStatisticsResultMiddle middle3 = new DataStatisticsResultMiddle();
            middle3.setDatas("2019");
            middle3.setCarrierid("1");
            middle3.setEnusers(200L);
    
            DataStatisticsResultMiddle middle4 = new DataStatisticsResultMiddle();
            middle4.setDatas("2019");
            middle4.setCarrierid("2");
            middle4.setEnusers(400L);
            DataStatisticsResultMiddle middle5 = new DataStatisticsResultMiddle();
            middle5.setDatas("2019");
            middle5.setCarrierid("2");
            middle5.setEnusers(500L);
            DataStatisticsResultMiddle middle6 = new DataStatisticsResultMiddle();
            middle6.setDatas("2019");
            middle6.setCarrierid("2");
            middle6.setEnusers(600L);
    
            li.add(middle1);
            li.add(middle2);
            li.add(middle3);
            li.add(middle4);
            li.add(middle5);
            li.add(middle6);
    
    
            //单个字段,分组求和(datas)
            Map<String, LongSummaryStatistics> enusersCollect1 =
                    li.stream().collect(Collectors.groupingBy(DataStatisticsResultMiddle:: getDatas, Collectors.summarizingLong(DataStatisticsResultMiddle :: getEnusers)));
            LongSummaryStatistics enusers = enusersCollect1.get("2019");
            System.out.println(enusers.getSum());
    
            System.out.println("分割线***********************************");
    
            //多个字段,分组求和(先按datas分组,再按Carrierid分组,求和)
            Map<String, Map<String, LongSummaryStatistics>> enusersCollect2 =
                    li.stream().collect(Collectors.groupingBy(DataStatisticsResultMiddle:: getDatas,
                                            Collectors.groupingBy(DataStatisticsResultMiddle:: getCarrierid,
                                                Collectors.summarizingLong(DataStatisticsResultMiddle :: getEnusers))));
            Map<String, LongSummaryStatistics> map = enusersCollect2.get("2019");
            for(Map.Entry<String, LongSummaryStatistics> entry : map.entrySet()){
                System.out.println(entry.getKey());
                System.out.println(entry.getValue().getSum());
            }
    
        }
    
    }
    

      

    输出结果如下:

  • 相关阅读:
    POJ_1523 SPF (Tarjan 求割点)
    POJ 3177&& 3352
    POJ 基础数据结构
    Bellman Ford, SPFA 学习笔记(含有负权的单源最短路径)
    HDU_3062 Party (2SAT)
    POJ二分图最大匹配的简单题目
    POJ 2553 The Bottom of a Graph (Trajan 强连通分量 缩点)
    POJ_3678 Katu Puzzle (2SAT)
    HDU_3836 Equivalent Set (Trajan 强连通分量 缩点)
    POJ1904 King's Quest(Tarjan 求缩点)
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/11876263.html
Copyright © 2011-2022 走看看