Java8進行多個字段分組統(tǒng)計的實例代碼
Java8進行多個字段分組統(tǒng)計實現(xiàn)代碼如下:
// 分組統(tǒng)計
Map<String, Long> countMap = records.stream().collect(Collectors.groupingBy(o -> o.getProductType() + "_" + o.getCountry(), Collectors.counting()));
List<Record> countRecords = countMap.keySet().stream().map(key -> {
String[] temp = key.split("_");
String productType = temp[0];
String country = temp[1];
Record record = new Record();
record.set("device_type", productType);
record.set("location", country;
record.set("count", countMap.get(key).intValue());
return record;
}).collect(Collectors.toList());
實例補充:
1.本實例其實可以用一句簡單的sql去實現(xiàn) 由于我們項目數(shù)據(jù)庫中時間存的是13位的時間戳 所以必須得轉行成日期格式 才能進行分組 如下:
SELECT count(1) simpleNumber, SUM(penalty_amount) AS simplePenaltyAmount, Handling_department, create_time, LEFT(FROM_UNIXTIME(LEFT(create_time,10)),7) FROM t_case_simple_case WHERE 1 = 1 GROUP BY Handling_department,LEFT(FROM_UNIXTIME(LEFT(create_time,10)),7)
以上的就能實現(xiàn)多字段求和統(tǒng)計等功能 但我們老大考慮到查詢速度和換庫等問題 建議我不要用FROM_UNIXTIME()函數(shù),所以只能用最笨的方法一步步實現(xiàn) 以下是用Java8方式實現(xiàn)的 代碼如下:
@Override
public List<StatisticalAnalysis> queryFirstCase(String startTime,String condition,String caseType) {
List<StatisticalAnalysis> statisticalAnalyses = null;
//簡易案件
if (caseType.equals(CaseTypeEnum.SIMPLETYPE.code())) {
statisticalAnalyses = statisticalAnalysisDao.querySimpleData();
}
//一般案件
if (caseType.equals(CaseTypeEnum.NORMALTYPE.code())) {
statisticalAnalyses = statisticalAnalysisDao.queryNormalData();
}
for (StatisticalAnalysis analysis : statisticalAnalyses) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
String newCreateTime = sdf.format(new Date(Long.valueOf(analysis.getCreateTime())));
analysis.setCreateTime(newCreateTime);
SysOrg sysOrg = commonSearchDao.findByOrgId(analysis.getHandlingDepartment());
if (sysOrg != null) {
analysis.setHandlingDepartmentName(sysOrg.getOrgName());
}
if(analysis.getSimplePenaltyAmount()==null){
analysis.setSimplePenaltyAmount(0.0);
}
} catch (Exception e) {
e.printStackTrace();
}
}
List<StatisticalAnalysis> caseTotalList = new ArrayList<>();
//根據(jù)部門 日期進行分組 統(tǒng)計
Map<String, Map<String, Long>> caseTotal = statisticalAnalyses.stream().collect(Collectors.groupingBy(StatisticalAnalysis::getCreateTime, Collectors.groupingBy(StatisticalAnalysis::getHandlingDepartmentName, Collectors.counting())));
//根據(jù)部門 日期進行分組 求和
Map<String, Map<String, Double>> sumCase = statisticalAnalyses.stream().collect(Collectors.groupingBy(StatisticalAnalysis::getCreateTime, Collectors.groupingBy(StatisticalAnalysis::getHandlingDepartmentName, Collectors.summingDouble(StatisticalAnalysis::getSimplePenaltyAmount))));
//根據(jù)年份進行模糊匹配 取出對應的統(tǒng)計值
for (Map.Entry<String, Map<String, Long>> entry : caseTotal.entrySet()) {
if (entry.getKey().indexOf(startTime) > -1) {
StatisticalAnalysis statisticalAnalysis = new StatisticalAnalysis();
statisticalAnalysis.setCreateTime(entry.getKey());
//將年份-去掉 組成新的數(shù)字 主要作為排序
String key = entry.getKey().replace("-", "");
Integer sortNum = Integer.parseInt(key);
statisticalAnalysis.setSortNum(sortNum);
Map<String, Long> map = entry.getValue();
for (Map.Entry<String, Long> entr : map.entrySet()) {
statisticalAnalysis.setHandlingDepartmentName(entr.getKey());
statisticalAnalysis.setSimpleNumber(entr.getValue());
}
caseTotalList.add(statisticalAnalysis);
}
}
caseTotalList.sort((a, b) -> a.getSortNum() - b.getSortNum());
//根據(jù)年份進行模糊匹配 取出對應的求和值
List<StatisticalAnalysis> analyses = new ArrayList<>();
for (Map.Entry<String, Map<String, Double>> entry : sumCase.entrySet()) {
if (entry.getKey().indexOf(startTime) > -1) {
StatisticalAnalysis statisticalAnalysis = new StatisticalAnalysis();
statisticalAnalysis.setCreateTime(entry.getKey());
//將年份-去掉 組成新的數(shù)字 主要作為排序
String key = entry.getKey().replace("-", "");
Integer sortNum = Integer.parseInt(key);
statisticalAnalysis.setSortNum(sortNum);
Map<String, Double> map = entry.getValue();
for (Map.Entry<String, Double> entr : map.entrySet()) {
statisticalAnalysis.setHandlingDepartmentName(entr.getKey());
statisticalAnalysis.setSimplePenaltyAmount(entr.getValue());
}
analyses.add(statisticalAnalysis);
}
}
analyses.sort((a, b) -> a.getSortNum() - b.getSortNum());
//將統(tǒng)計和求和組合成一個新的集合返回前端
List<StatisticalAnalysis> analysisList = new ArrayList<>();
for (StatisticalAnalysis analys : caseTotalList) {
for (StatisticalAnalysis analys2 : analyses) {
StatisticalAnalysis statisticalAnalysis = new StatisticalAnalysis();
if (analys.getSortNum().intValue() == analys2.getSortNum().intValue()) {
statisticalAnalysis.setSimpleNumber(analys.getSimpleNumber());
statisticalAnalysis.setSimplePenaltyAmount(analys2.getSimplePenaltyAmount());
statisticalAnalysis.setCreateTime(analys.getCreateTime());
statisticalAnalysis.setHandlingDepartmentName(analys.getHandlingDepartmentName());
analysisList.add(statisticalAnalysis);
}
}
}
List<StatisticalAnalysis> newAnalysisList = new ArrayList<>();
if (analysisList.size() > 0) {
//查詢第一季度
if (condition.equals(YearEnum.FIRST.code())) {
for (StatisticalAnalysis analysis : analysisList) {
StatisticalAnalysis analysis1 = new StatisticalAnalysis();
if (analysis.getCreateTime().indexOf(startTime + "-01") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.FIRST.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.FIRST.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-02") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.FIRST.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.FIRST.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-03") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.FIRST.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.FIRST.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
}
return newAnalysisList;
}
//查詢第二季度
if (condition.equals(YearEnum.SECOND.code())) {
for (StatisticalAnalysis analysis : analysisList) {
StatisticalAnalysis analysis1 = new StatisticalAnalysis();
if (analysis.getCreateTime().indexOf(startTime + "-04") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.SECOND.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.SECOND.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-05") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.SECOND.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.SECOND.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-06") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.SECOND.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.SECOND.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
}
return newAnalysisList;
}
//查詢第三季度
if (condition.equals(YearEnum.THREE.code())) {
for (StatisticalAnalysis analysis : analysisList) {
StatisticalAnalysis analysis1 = new StatisticalAnalysis();
if (analysis.getCreateTime().indexOf(startTime + "-07") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.THREE.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.THREE.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-08") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.THREE.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.THREE.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-09") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.THREE.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.THREE.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
}
return newAnalysisList;
}
//查詢第四季度
if (condition.equals(YearEnum.FOUR.code())) {
for (StatisticalAnalysis analysis : analysisList) {
StatisticalAnalysis analysis1 = new StatisticalAnalysis();
if (analysis.getCreateTime().indexOf(startTime + "-10") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.FOUR.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.FOUR.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-11") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.FOUR.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.FOUR.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-12") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.FOUR.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.FOUR.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
}
return newAnalysisList;
}
//查詢上半年 取前六條數(shù)據(jù)
if (condition.equals(YearEnum.HALF.code())) {
for (StatisticalAnalysis analysis : analysisList) {
StatisticalAnalysis analysis1 = new StatisticalAnalysis();
if (analysis.getCreateTime().indexOf(startTime + "-01") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.HALF.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.HALF.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-02") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.HALF.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.HALF.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-03") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.HALF.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.HALF.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-04") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.HALF.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.HALF.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-05") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.HALF.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.HALF.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-06") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.HALF.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.HALF.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
}
return newAnalysisList;
}
//查詢下半年 后六條數(shù)據(jù)
if (condition.equals(YearEnum.LASTHALF.code())) {
for (StatisticalAnalysis analysis : analysisList) {
StatisticalAnalysis analysis1 = new StatisticalAnalysis();
if (analysis.getCreateTime().indexOf(startTime + "-07") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.LASTHALF.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.LASTHALF.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-08") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.LASTHALF.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.LASTHALF.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-09") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.LASTHALF.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.LASTHALF.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-10") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.LASTHALF.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.LASTHALF.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-11") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.LASTHALF.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.LASTHALF.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
if (analysis.getCreateTime().indexOf(startTime + "-12") > -1) {
BeanUtils.copyProperties(analysis, analysis1);
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis1.setTitle(startTime+YearEnum.LASTHALF.desc()+"各部門簡易案件");
}else{
analysis1.setTitle(startTime+YearEnum.LASTHALF.desc()+"各部門一般案件");
}
newAnalysisList.add(analysis1);
}
}
return newAnalysisList;
}
if (condition.equals(YearEnum.FULLYEAR.code())) {
for (StatisticalAnalysis analysis : analysisList) {
if(caseType.equals(CaseTypeEnum.SIMPLETYPE.code())){
analysis.setTitle(startTime+YearEnum.FULLYEAR.desc()+"各部門簡易案件");
}else{
analysis.setTitle(startTime+YearEnum.FULLYEAR.desc()+"各部門一般案件");
}
}
return analysisList;
}
}
return null;
}
到此這篇關于Java8進行多個字段分組統(tǒng)計的實例代碼的文章就介紹到這了,更多相關Java8進行多個字段分組統(tǒng)計實現(xiàn)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring Cloud OpenFeign REST服務客戶端原理及用法解析
這篇文章主要介紹了Spring Cloud OpenFeign REST服務客戶端原理及用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-10-10
一文詳解SpringMVC中的@RequestMapping注解
@RequestMapping是一個用于映射HTTP請求到處理方法的注解,在Spring框架中使用,它可以用于控制器類和處理方法上,用來指定處理不同URL路徑的請求,并定義請求的方法等,本文小編將給大家詳細的介紹一下SpringMVC中的@RequestMapping注解,需要的朋友可以參考下2023-08-08
Java中使用裝飾設計模式實現(xiàn)動態(tài)增強對象功能
裝飾設計模式是Java中一種常用的設計模式,它通過動態(tài)地將功能透明地附加到對象上,以擴展對象的功能。裝飾設計模式主要應用于需要動態(tài)、透明地增強對象功能的場景。在Java中,裝飾設計模式可通過繼承、接口和代理等方式實現(xiàn)2023-04-04
HashMap vs TreeMap vs Hashtable vs LinkedHashMap
這篇文章主要介紹了HashMap vs TreeMap vs Hashtable vs LinkedHashMap的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07
jpa多條件查詢重寫Specification的toPredicate方法
這篇文章主要介紹了多條件查詢重寫Specification的toPredicate方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
Spring Cloud之遠程調用OpenFeign參數(shù)傳遞
本文介紹了Spring Cloud中使用OpenFeign進行遠程調用時,參數(shù)傳遞的不同方式,包括傳遞單個參數(shù)、多個參數(shù)、對象和JSON數(shù)據(jù),感興的朋友一起看看吧2025-03-03

