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());
        }

    }

}

  

輸出結果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM