java将2个List<map>集合整合到一个List<map>里面,并按时间顺序排序第二种情况

这篇博客介绍了如何使用Java将两个List>集合合并成一个,并按照日期排序,同时处理当某个日期的Map中缺少特定字段时,添加该字段并设置默认值为0的情况。通过示例代码详细展示了整个处理过程,包括合并、排序和填充默认值的步骤。
摘要由CSDN通过智能技术生成

java将2个List集合整合到一个List里面,并按时间顺序排序第二种情况

说明

在项目里面,有时候经常要对数据做统计呈现给前端做各种类型的图,但是在后端中,有时候老是遇到需要将2个List集合合到一个里面,并按顺序返回给前端的时候,这样前端对接更方便。这里我记录下自己的方法,以后用可以直接拿。

新增当相同的日期里面某个字段在原集合list1中有,list2中没有,那么就添加该key值,并设置默认值0。示例如下:
[{date=2021-11-20, num2=12}, {date=2021-11-24, num1=1},{date=2021-11-25, num1=2, num2=6}]
期望结果:
[{date=2021-11-20, num1=0, num2=12}, {date=2021-11-24, num1=1, num2=0},{date=2021-11-25, num1=2, num2=6}]

代码

	package com.etone.project.controllers.dtracejobinfo;

import java.text.SimpleDateFormat;
import java.util.*;

public class Test {
    public static void main(String[] args) {
        mergeList2();
    }
    
    //第二种处理情况
    //list1中的日期num1值在list2中没有,或者list2中的num2在list1中没有,那么就添加该字段并设置默认值0,如果符合这种情况,可以用如下方法
    public static void mergeList2(){
        List<Map<String,Object>> list1=new ArrayList<>();
        List<Map<String,Object>> list2=new ArrayList<>();
        Map<String,Object> map1=new HashMap<>();
        map1.put("date","2021-11-24");
        map1.put("num1",1);
        Map<String,Object> map2=new HashMap<>();
        map2.put("date","2021-11-25");
        map2.put("num1",2);
        Map<String,Object> map3=new HashMap<>();
        map3.put("date","2021-11-26");
        map3.put("num1",3);
        Map<String,Object> map4=new HashMap<>();
        map4.put("date","2021-11-27");
        map4.put("num1",4);
        Map<String,Object> map5=new HashMap<>();
        map5.put("date","2021-11-28");
        map5.put("num1",5);
        Map<String,Object> map6=new HashMap<>();
        map6.put("date","2021-11-25");
        map6.put("num2",6);
        Map<String,Object> map7=new HashMap<>();
        map7.put("date","2021-11-26");
        map7.put("num2",7);
        Map<String,Object> map8=new HashMap<>();
        map8.put("date","2021-11-28");
        map8.put("num2",8);
        Map<String,Object> map11=new HashMap<>();
        map11.put("date","2021-11-30");
        map11.put("num2",11);
        Map<String,Object> map12=new HashMap<>();
        map12.put("date","2021-11-20");
        map12.put("num2",12);
        //模拟数据库根据时间分组,统计第一种数量,并以升序的方式排列,这是第一条数据
        list1.add(map1);
        list1.add(map2);
        list1.add(map3);
        list1.add(map4);
        list1.add(map5);
        System.out.println("list1="+list1.toString());
        //模拟数据库根据时间分组,统计第二种数量,并以升序的方式排列,这是第二条数据
        list2.add(map12);
        list2.add(map6);
        list2.add(map7);
        list2.add(map8);
        list2.add(map11);
        System.out.println("list2="+list2.toString());

        //-------------------------------------------------------------------------------
        //下面才是实际需要的处理过程
        //期望结果显示样例,如果时间相同,那么就放到一个集合里面如:[{date=2021-11-24, num1=1,num2=5}]
        //处理方法,先将2个list里面的map加到一个新的List<map>集合里面,这样以后如果有多个list<map>,可以统一在一个list<map>处理
        List<Map<String,Object>> list3=new ArrayList<>();
        //将list1集合里面的map添加到list3中
        for(int i=0;i<list1.size();i++){
            list3.add(list1.get(i));
        }
        //将list2集合里面的map添加到list3中
        for(int i=0;i<list2.size();i++){
            list3.add(list2.get(i));
        }
        System.out.println("将list1和list2放到list3="+list3.toString());
        
        //如果date相同,将list1和list2里面的值合并到一个map里面
        //统一在一个list<map>里面处理,如果date相同,取下面所有值
        for (int i = 0; i < list3.size() ;i++){
            Map map9 = list3.get(i);
            for (int j = i + 1; j < list3.size();){
                Map<String,Object> map10 = list3.get(j);
                if (map9.get("date") == map10.get("date")){
                    for (Map.Entry entry : map10.entrySet()) {
                        if (entry.getKey().equals("date")){
                            //不保存date
                            continue;
                        }
                        map9.put(entry.getKey(),entry.getValue());
                    }
                    //删除已合并的map避免重复比较
                    list3.remove(j);
                    continue;
                }
                j++;
            }
        }
        System.out.println("经处理后的得到期望的list3结果="+list3.toString());

        //将处理后的list3集合按日期顺序排序
        Collections.sort(list3, new Comparator<Map<String, Object>>() {
            //升序排列
            @Override
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                return o1.get("date").toString().compareTo(o2.get("date").toString());
            }
        });
        System.out.println("升序后排列结果="+list3.toString());

        //如果map里面只有num1或者num2,那么添加该key并设置默认值0
        for(int i=0;i<list3.size();i++){
            //判断map集合里面是否存在该key值,如果不存在就添加该key,并赋值0
            if(!list3.get(i).containsKey("num1")){
                list3.get(i).put("num1",0);
            }else if(!list3.get(i).containsKey("num2")){
                list3.get(i).put("num2",0);
            }
        }
        System.out.println("填充默认值升序后排列结果="+list3.toString());
    }
}




后台呈现结果如下:

list1=[{date=2021-11-24, num1=1}, {date=2021-11-25, num1=2}, {date=2021-11-26, num1=3}, {date=2021-11-27, num1=4}, {date=2021-11-28, num1=5}]
list2=[{date=2021-11-20, num2=12}, {date=2021-11-25, num2=6}, {date=2021-11-26, num2=7}, {date=2021-11-28, num2=8}, {date=2021-11-30, num2=11}]
将list1和list2放到list3=[{date=2021-11-24, num1=1}, {date=2021-11-25, num1=2}, {date=2021-11-26, num1=3}, {date=2021-11-27, num1=4}, {date=2021-11-28, num1=5}, {date=2021-11-20, num2=12}, {date=2021-11-25, num2=6}, {date=2021-11-26, num2=7}, {date=2021-11-28, num2=8}, {date=2021-11-30, num2=11}]
经处理后的得到期望的list3结果=[{date=2021-11-24, num1=1}, {date=2021-11-25, num1=2, num2=6}, {date=2021-11-26, num1=3, num2=7}, {date=2021-11-27, num1=4}, {date=2021-11-28, num1=5, num2=8}, {date=2021-11-20, num2=12}, {date=2021-11-30, num2=11}]
升序后排列结果=[{date=2021-11-20, num2=12}, {date=2021-11-24, num1=1}, {date=2021-11-25, num1=2, num2=6}, {date=2021-11-26, num1=3, num2=7}, {date=2021-11-27, num1=4}, {date=2021-11-28, num1=5, num2=8}, {date=2021-11-30, num2=11}]
填充默认值升序后排列结果=[{date=2021-11-20, num1=0, num2=12}, {date=2021-11-24, num1=1, num2=0}, {date=2021-11-25, num1=2, num2=6}, {date=2021-11-26, num1=3, num2=7}, {date=2021-11-27, num1=4, num2=0}, {date=2021-11-28, num1=5, num2=8}, {date=2021-11-30, num1=0, num2=11}]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值