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