国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用Lambda表達式對List<Map<String,Object>>中key值相同的Map進行分組合并

這篇具有很好參考價值的文章主要介紹了使用Lambda表達式對List<Map<String,Object>>中key值相同的Map進行分組合并。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

現(xiàn)有兩張表A表和B表,A表存放的是各省市的認證次數(shù),B表存放的是各省市的申領次數(shù),重點關注dq,cs這兩個字段,其他的字段可忽略

使用Lambda表達式對List<Map<String,Object>>中key值相同的Map進行分組合并,Java,Map,集合,java,lambda表達式,map的key值相同合并,echarts地圖省市數(shù)據(jù)統(tǒng)計

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?A表(省市認證次數(shù)表)

使用Lambda表達式對List<Map<String,Object>>中key值相同的Map進行分組合并,Java,Map,集合,java,lambda表達式,map的key值相同合并,echarts地圖省市數(shù)據(jù)統(tǒng)計

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? B表(省市申領次數(shù)表)

項目中有以下需求:

? ? ?現(xiàn)要求統(tǒng)計各省市的認證次數(shù)和申領次數(shù),以及認證和申領次數(shù)之和,以此再地圖上展示數(shù)據(jù)。

? ? ? ?A表和B表中都有dq和cs這兩個字段,dq都表示行政區(qū)劃編碼,A表中的cs表示認證次數(shù),B表中的cs表示申領次數(shù),將兩張表中dq值相同的分組放進同一個map中,再計算認證次數(shù)和申領次數(shù)之和,這個需求很明顯就是Map要合并key的場景,將查出的數(shù)據(jù)進行合并,再分組,可使用Lambda表達式實現(xiàn),部分代碼如下:

Controller代碼:

/**
     *  4、區(qū)域省份認證情況統(tǒng)計
     * @return
     */
@PostMapping(value="/loadProvinceAuthData")
    public ResponseVO loadProvinceAuthData() {
        try {
            Map<String, Object> data = new HashMap<>();
            ReportExternalRiskEntity request = new ReportExternalRiskEntity();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date date=new Date();
            String startTime = sdf.format(date)+" 00:00:00";
            String endTime = sdf.format(date)+" 23:59:59";
            request.setStartTime(startTime);
            request.setEndTime(endTime);
            //List<Map<String,Object>> provinceAuthDataList = reportIdentityAuthStatService.getProvinceAuthDataList(request);
            List<Map<String,Object>> provinceAuthDataList = shenLingRenZhengService.getProvinceAuthDataList(request);
            data.put("list",provinceAuthDataList);
            return RespUtil.success(data);
        } catch (Exception e) {
            log.error("請求接口loadProvinceAuthData報錯->{}",e);
            return RespUtil.sysError(String.valueOf(ResultCodeEnum.SYSTEM_ERROR));
        }
    }

?重點看Service代碼中如何處理:

@Override
    public List<Map<String, Object>> getProvinceAuthDataList(ReportExternalRiskEntity request) throws Exception {
        List<Map<String, Object>> xzqhDataMapList = new ArrayList<>();

        Map queryParams = new HashMap();
        Date date=new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String queryDate = sdf.format(date);
        queryParams.put("ywrq",queryDate);
        List<Map<String, Object>> rzcsDqDataList = reportDpRzcsDqMapper.queryRzcsDqByYwrq(queryParams);//數(shù)據(jù)庫查詢認證次數(shù)返回的list
        List<Map<String, Object>> slcsDqDataList = reportDpSlcsDqMapper.querySlcsDqByYwrq(queryParams);//數(shù)據(jù)庫查詢申領次數(shù)返回的list

        PageData xzqhMap = CacheUtils.getTyZdMap(StaticVar.PROVICE_XZQH);
        if(CollectionUtils.isNotEmpty(rzcsDqDataList) && CollectionUtils.isEmpty(slcsDqDataList)){ //認證區(qū)域統(tǒng)計查詢List有數(shù)據(jù)
            for (Map<String, Object> rzcsMap : rzcsDqDataList) {
                Map<String, Object> xzqhDataMap = new HashMap<>();
                //String authnumStr = (String) rzcsMap.get("authnum"); //注意:會報錯java.math.BigDecimal cannot be cast to java.lang.Integer,先轉(zhuǎn)成String類型,再轉(zhuǎn)Integer
                //Integer authNum = (Integer) rzcsMap.get("authnum")==null?0:(Integer) rzcsMap.get("authnum");
                String authnumStr = StringUtils.isBlank(String.valueOf(rzcsMap.get("authnum")))?"0":String.valueOf(rzcsMap.get("authnum"));
                Integer authNum = Integer.parseInt(authnumStr);
                String rzdq = (String) rzcsMap.get("dq");
                String rzdq_bm = rzdq+StaticVar.XZQH_SUFFIX;
                xzqhDataMap.put("bm",rzdq_bm);
                xzqhDataMap.put("name",xzqhMap.get(rzdq_bm));
                xzqhDataMap.put("authNum",authNum);
                xzqhDataMap.put("applyNum",0);
                xzqhDataMap.put("totalNum",authNum);
                xzqhDataMap.put("leval",getLeval(authNum));
                xzqhDataMapList.add(xzqhDataMap);
            }
        }else if(CollectionUtils.isNotEmpty(slcsDqDataList) && CollectionUtils.isEmpty(rzcsDqDataList)){//申領區(qū)域統(tǒng)計查詢List有數(shù)據(jù)
            for (Map<String, Object> slcsMap : slcsDqDataList) {
                Map<String, Object> xzqhDataMap = new HashMap<>();
                //Integer applyNum = (Integer) xzqhDataMap.get("applynum");
                String applynumStr = StringUtils.isBlank(String.valueOf(slcsMap.get("applynum")))?"0":String.valueOf(slcsMap.get("applynum"));
                Integer applyNum = Integer.parseInt(applynumStr);
                String sldq = (String) xzqhDataMap.get("dq");
                String sldq_bm = sldq+StaticVar.XZQH_SUFFIX;
                xzqhDataMap.put("bm",sldq_bm);
                xzqhDataMap.put("name",xzqhMap.get(sldq_bm));
                xzqhDataMap.put("authNum",0);
                xzqhDataMap.put("applyNum",applyNum);
                xzqhDataMap.put("totalNum",applyNum);
                xzqhDataMap.put("leval",getLeval(applyNum));
                xzqhDataMapList.add(xzqhDataMap);
            }
        }else if(CollectionUtils.isNotEmpty(rzcsDqDataList) && CollectionUtils.isNotEmpty(slcsDqDataList)) { //申領和認證都有數(shù)據(jù)

            for (Map<String, Object> rzcsMap : rzcsDqDataList) {
                String authnumStr = StringUtils.isBlank(String.valueOf(rzcsMap.get("authnum")))?"0":String.valueOf(rzcsMap.get("authnum"));
                Integer authNum = Integer.parseInt(authnumStr);
                rzcsMap.put("authNum",authNum);//將authnum替換為authNum
                rzcsMap.remove("authnum");//去掉那個authNum
            }

            for (Map<String, Object> slcsMap : slcsDqDataList) {
                String applynumStr = StringUtils.isBlank(String.valueOf(slcsMap.get("applynum")))?"0":String.valueOf(slcsMap.get("applynum"));
                Integer applyNum = Integer.parseInt(applynumStr);
                slcsMap.put("applyNum",applyNum);
                slcsMap.remove("applynum");
            }

            //合并,兩個數(shù)據(jù)list放入一個新的list中
            List<Map<String, Object>> new_dataList = new ArrayList<>();
            new_dataList.addAll(rzcsDqDataList);
            new_dataList.addAll(slcsDqDataList);

            //先分組,將key值相同的放在一個map中
            xzqhDataMapList = new_dataList.stream()
                    .collect(Collectors.groupingBy(group -> group.get("dq").toString())) // 根據(jù)map中id的value值進行分組, 這一步的返回結(jié)果Map<String,List<Map<String, Object>>>
                    .entrySet() // 得到Set<Map.Entry<String, List<Map<String, Object>>>
                    .stream()
                    .map(m -> { // 進入映射環(huán)境
                        // m.getValue()的結(jié)果是 List<Map<String, Object>>
                        Map<String, Object> collect = m.getValue().stream()
                                // o.entrySet() 的結(jié)果是 Set<Map.Entry<String, Object>>
                                .flatMap(o -> o.entrySet().stream()).filter(e -> e.getValue() != null)//過濾下,value需要是不為空的,否則報錯
                                // (m1, m2) -> m1 的意思是如果key相同 m1 == m2 則value使用m1(此處為rzcsDqDataList中的值)
                                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (m1, m2) -> m1
                                ));
                        return collect;
                    }).sorted(Comparator.comparing(m -> m.get("dq").toString())).collect(Collectors.toList());

            System.out.println("處理后的xzqhDataMapList為:"+xzqhDataMapList);
            System.out.println("處理后的xzqhDataMapList的Json為:"+ JSON.toJSONString(xzqhDataMapList));

            //處理分組后的數(shù)據(jù),得到認證次數(shù)和申領次數(shù)之和totalNum
            for (Map<String, Object> xzqhDataMap : xzqhDataMapList) {
                String dq = (String) xzqhDataMap.get("dq");

                int totalNum = 0;
                Integer authNum = 0;
                Integer applyNum = 0 ;
                if(xzqhDataMap.containsKey("authNum")){
                    String authnumStr = StringUtils.isBlank(String.valueOf(xzqhDataMap.get("authNum")))?"0":String.valueOf(xzqhDataMap.get("authNum"));
                    authNum = Integer.parseInt(authnumStr);
                }

                if(xzqhDataMap.containsKey("applyNum")){
                    String applynumStr = StringUtils.isBlank(String.valueOf(xzqhDataMap.get("applyNum")))?"0":String.valueOf(xzqhDataMap.get("applyNum"));
                    applyNum = Integer.parseInt(applynumStr);
                }

                totalNum = authNum + applyNum;
                int level = getLeval(totalNum);
                xzqhDataMap.put("totalNum",totalNum);
                xzqhDataMap.put("level",level);
                if(!xzqhDataMap.containsKey("authNum")){ //若Map中沒有"authNum",補key,"authNum"
                    xzqhDataMap.put("authNum",0);
                }

                if(!xzqhDataMap.containsKey("applyNum")){  若Map中沒有"applyNum",補key,"applyNum"
                    xzqhDataMap.put("applyNum",0);
                }
                //行政區(qū)劃翻譯
                String xzqh_bm = dq+StaticVar.XZQH_SUFFIX;
                xzqhDataMap.put("bm",xzqh_bm);
                xzqhDataMap.put("name",xzqhMap.get(xzqh_bm));
                xzqhDataMap.remove("dq");
            }

        }
        
        return xzqhDataMapList;
    }

 //計算等級level值
  private static int getLeval(int totalNum) {
        int leval = 0;
        if(totalNum==0){
            return leval;
        }
        if(totalNum >=1 && totalNum <=900){
            leval = 1;
        }else if(totalNum >=901 && totalNum <=2000){
            leval = 2;
        }else if(totalNum >=2001 && totalNum <=4000){
            leval = 3;
        }else if(totalNum >=4001){
            leval = 4;
        }
        return leval;
    }
<!--查詢認證次數(shù)返回的list-->
<select id="queryRzcsDqByYwrq" parameterType="java.util.Map" resultType="java.util.Map">
        select dq,sum(cs) as authNum from
            report_dp_rzcs_dq
        where ywrq =#{ywrq}
        group by dq
    </select>
  <!--查詢申領次數(shù)返回的list-->
    <select id="querySlcsDqByYwrq" parameterType="java.util.Map" resultType="java.util.Map">
        select dq,sum(cs) as applyNum from
            report_dp_slcs_dq
        where ywrq = #{ywrq}
        group by dq
    </select>

請求接口http://127.0.0.1:8050/report/idauthstat/loadProvinceAuthData返回的數(shù)據(jù)結(jié)構(gòu)如下:

{

????"data":?{

????????"list":?[

????????????{

????????????????"totalNum":?228,

????????????????"level":?1,

????????????????"authNum":?228,

????????????????"name":?"河北",

????????????????"bm":?"130000",

????????????????"applyNum":?0

????????????},

????????????{

????????????????"totalNum":?189,

????????????????"level":?1,

????????????????"authNum":?189,

????????????????"name":?"內(nèi)蒙古",

????????????????"bm":?"150000",

????????????????"applyNum":?0

????????????},

????????????{

????????????????"totalNum":?356,

????????????????"level":?1,

????????????????"authNum":?356,

????????????????"name":?"遼寧",

????????????????"bm":?"210000",

????????????????"applyNum":?0

????????????},

????????????{

????????????????"totalNum":?798,

????????????????"level":?1,

????????????????"authNum":?662,

????????????????"name":?"吉林",

????????????????"bm":?"220000",

????????????????"applyNum":?136

????????????},

????????????{

????????????????"totalNum":?1260,

????????????????"level":?2,

????????????????"authNum":?1260,

????????????????"name":?"上海",

????????????????"bm":?"310000",

????????????????"applyNum":?0

????????????},

????????????{

????????????????"totalNum":?985,

????????????????"level":?2,

????????????????"authNum":?0,

????????????????"name":?"福建",

????????????????"bm":?"350000",

????????????????"applyNum":?985

????????????},

????????????{

????????????????"totalNum":?1006,

????????????????"level":?2,

????????????????"authNum":?0,

????????????????"name":?"江西",

????????????????"bm":?"360000",

????????????????"applyNum":?1006

????????????},

????????????{

????????????????"totalNum":?1209,

????????????????"level":?2,

????????????????"authNum":?0,

????????????????"name":?"山東",

????????????????"bm":?"370000",

????????????????"applyNum":?1209

????????????},

????????????{

????????????????"totalNum":?100,

????????????????"level":?1,

????????????????"authNum":?0,

????????????????"name":?"湖北",

????????????????"bm":?"420000",

????????????????"applyNum":?100

????????????},

????????????{

????????????????"totalNum":?1725,

????????????????"level":?2,

????????????????"authNum":?1725,

????????????????"name":?"湖南",

????????????????"bm":?"430000",

????????????????"applyNum":?0

????????????},

????????????{

????????????????"totalNum":?896,

????????????????"level":?1,

????????????????"authNum":?0,

????????????????"name":?"廣東",

????????????????"bm":?"440000",

????????????????"applyNum":?896

????????????},

????????????{

????????????????"totalNum":?625,

????????????????"level":?1,

????????????????"authNum":?489,

????????????????"name":?"重慶",

????????????????"bm":?"500000",

????????????????"applyNum":?136

????????????},

????????????{

????????????????"totalNum":?789,

????????????????"level":?1,

????????????????"authNum":?0,

????????????????"name":?"四川",

????????????????"bm":?"510000",

????????????????"applyNum":?789

????????????},

????????????{

????????????????"totalNum":?623,

????????????????"level":?1,

????????????????"authNum":?623,

????????????????"name":?"陜西",

????????????????"bm":?"610000",

????????????????"applyNum":?0

????????????},

????????????{

????????????????"totalNum":?1024,

????????????????"level":?2,

????????????????"authNum":?0,

????????????????"name":?"新疆",

????????????????"bm":?"650000",

????????????????"applyNum":?1024

????????????},

????????????{

????????????????"totalNum":?420,

????????????????"level":?1,

????????????????"authNum":?420,

????????????????"name":?"臺灣",

????????????????"bm":?"710000",

????????????????"applyNum":?0

????????????},

????????????{

????????????????"totalNum":?876,

????????????????"level":?1,

????????????????"authNum":?876,

????????????????"name":?"香港",

????????????????"bm":?"810000",

????????????????"applyNum":?0

????????????}

????????]

????},

????"msg":?"操作成功",

????"success":?true,

????"code":?"I000000",

????"total":?null

}

統(tǒng)計完成,可參考?文章來源地址http://www.zghlxwxcb.cn/news/detail-535117.html

到了這里,關于使用Lambda表達式對List<Map<String,Object>>中key值相同的Map進行分組合并的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • c++(8.29)auto關鍵字,lambda表達式,數(shù)據(jù)類型轉(zhuǎn)換,標準模板庫,list,文件操作+Xmind

    c++(8.29)auto關鍵字,lambda表達式,數(shù)據(jù)類型轉(zhuǎn)換,標準模板庫,list,文件操作+Xmind

    封裝一個學生的類,定義一個學生這樣類的vector容器, 里面存放學生對象(至少3個) 再把該容器中的對象,保存到文件中。 再把這些學生從文件中讀取出來,放入另一個容器中并且遍歷輸出該容器里的學生。 ?1.模板類 2.異常(異常情況為取錢時取的錢小于0或者大于余額)

    2024年02月11日
    瀏覽(31)
  • 【C++】Lambda表達式的使用

    【C++】Lambda表達式的使用

    例如: 了解Lambda的優(yōu)點 掌握Lambda表達式的使用 了解Lambda表達式的底層原理 Lambda表達式的語法 lambda表達式的底層實現(xiàn)涉及到閉包(Closure)的概念。閉包是一個函數(shù)對象,它可以捕獲外部作用域中的變量,并在其生命周期內(nèi)訪問和修改這些變量。lambda表達式的底層實現(xiàn)就是通

    2024年02月14日
    瀏覽(20)
  • Java中Lambda表達式使用及詳解

    Lambda表達式(閉包):java8的新特性,lambda運行將函數(shù)作為一個方法的參數(shù),也就是函數(shù)作為參數(shù)傳遞到方法中。使用lambda表達式可以讓代碼更加簡潔。 Lambda表達式的使用場景:用以簡化接口實現(xiàn)。 關于接口實現(xiàn),可以有很多種方式來實現(xiàn)。例如:設計接口的實現(xiàn)類、使用匿

    2024年02月03日
    瀏覽(22)
  • QueryWrapper的lambda表達式使用OR

    com.baomidou.mybatisplus.core.conditions.query.QueryWrapper是MybatisPlus框架構(gòu)造查詢條件常用的對象 使用lambda表達式寫法更為清晰,簡潔: 默認情況下多個條件是and連接:上述寫法對應的SQL為:where name like \\\'%aa%\\\' and age = 20 如果要使用or連接的話,方法如下: 這里引申下我遇到的一個場景:

    2024年02月13日
    瀏覽(18)
  • Java中使用Lambda表達式對集合排序

    先定義一個集合 或 或 或 匿名內(nèi)部類方法 定義一個json數(shù)組 resultArray 注意:reversed()函數(shù)的意思是將數(shù)組顛倒。其用法常見于字符串處理中,將字符串顛倒 如: 典型的比較器示例 等價的Lambda的方式 假如我們要通過Developer 對象的年齡進行排序,通常情況下我們使用Collections

    2024年02月07日
    瀏覽(20)
  • 進階JAVA篇- Lambda 表達式與 Lambda 表達式的省略規(guī)則

    進階JAVA篇- Lambda 表達式與 Lambda 表達式的省略規(guī)則

    目錄 ? ? ? ? 1.0 什么是 Lambda 表達式? ? ? ? ? 1.1 既然跟匿名內(nèi)部類相關,先來回顧匿名內(nèi)部類。 ? ? ? ? ?1.2 Lambda 表達式與匿名內(nèi)部類之間的關系。 ? ? ? ? 1.3 函數(shù)式接口 ? ? ? ? 1.4 在具體代碼中來操作一下 ? ? ? ? 2.0?Lambda 表達式省略規(guī)則 ??????? ?Lambda 表達

    2024年02月08日
    瀏覽(29)
  • 探索Python中的函數(shù)式編程:Lambda表達式與函數(shù)式工具【第135篇—Lambda表達式】

    探索Python中的函數(shù)式編程:Lambda表達式與函數(shù)式工具【第135篇—Lambda表達式】

    前些天發(fā)現(xiàn)了一個巨牛的人工智能學習網(wǎng)站,通俗易懂,風趣幽默,忍不住分享一下給大家?!军c擊進入巨牛的人工智能學習網(wǎng)站】。 在Python編程世界中,函數(shù)式編程逐漸成為了一種流行的范式,特別是在處理數(shù)據(jù)和編寫簡潔、高效代碼時。函數(shù)式編程的核心思想是將計算視

    2024年04月08日
    瀏覽(32)
  • .NET寫一個自己的Lambda表達式與表達式樹

    .NET寫一個自己的Lambda表達式與表達式樹

    LambdaExpression繼承Expression Expression 又繼承LambdaExpressio 所以,LambdaExpression與 Expression 的區(qū)別在于:泛型類以靜態(tài)類型的方法標識了它是什么種類的表達式,也就是說,他確定了返回類型和參數(shù)。所以顯然,TDelegate必須是一個委托類型。 注意 :并非所有的Lambda表達式都能轉(zhuǎn)換成

    2024年02月13日
    瀏覽(23)
  • 【JAVA】包裝類、正則表達式、Arrays類、Lambda表達式

    包裝類是8種基本數(shù)據(jù)類型對應的引用類型 作用:后期的集合和泛型不支持基本類型,只能使用包裝類 基本數(shù)據(jù)類型和其對應的引用數(shù)據(jù)類型的變量可以互相賦值 基本數(shù)據(jù)類型 引用數(shù)據(jù)類型 byte Byte short Short int Integer long Long char Character float Float double Double boolean Boolean 包裝類

    2024年02月13日
    瀏覽(33)
  • 23.Lambda表達式

    23.Lambda表達式

    Lambda 表達式(lambda expression)是一個匿名函數(shù),Lambda表達式基于數(shù)學中的λ演算得名,直接對應于其中的lambda抽象(lambda abstraction),是一個匿名函數(shù),即沒有函數(shù)名的函數(shù)。Lambda表達式可以表示閉包(注意和數(shù)學傳統(tǒng)意義上的不同)。Lambda表達式是Java SE 8中一個重要的新特性。

    2024年02月03日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包