java将2个List<map>集合合到一个List<map>里面,并按时间顺序排序

这篇博客介绍了如何在Java中将两个List<Map<String, Object>>集合合并成一个,并按照日期升序排序。首先,将两个列表的所有元素添加到新的列表中,然后遍历新列表,如果日期相同,则将两个Map合并,最后通过自定义比较器实现按日期排序。这种方法适用于后端统计数据并以时间顺序返回给前端的情况。
摘要由CSDN通过智能技术生成

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

说明

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

代码

	package com.etone.project.controllers.dtracejobinfo;

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

public class Test {
    public static void main(String[] args) {
        mergeList1();
    }
    
    //list1中的日期为主要日期,如果list2中的有的日期在list1中不存在,会放到最后显示,会导致排序错乱,需要重新排序
    // 如果符合这种情况,可以用如下方法
    //map里面可以有多个key、value值,下面的也是可以合并到一个list<map>里面
    //map1.put("date","2021-11-24");
    //map1.put("num1",1);
    //map1.put("count1",1);
    public static void mergeList1() {
        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);
        //第一步:模拟从数据库中查询统计数据,将结果放到List集合里面
        //模拟数据库根据时间分组,统计第一种数量,并以升序的方式排列,这是第一条数据
        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());

        //-------------------------------------------------------------------------------
        //第二歩:将2个List<map>集合整合到一个List<map>集合里面
        //下面才是实际需要的处理过程
        //期望结果显示样例,如果时间相同,那么就放到一个集合里面如:[{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());
        //统一在一个list<map>里面处理,开始根据时间进行比对,整合到一个map里面
        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());
		
		//第三歩:通过date将list<map>集合重新按时间升序排列
        //将处理后的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());
    }
}




后台呈现结果如下:

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}]


Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值