解决多个List排序问题

闲着没事,抽个时间写写平时积累的一些小东西哈。在一次项目中遇到多个List根据其中某个字段进行排序,以下写了一个小Demo,大家参考一下,有什么更好的优化可以下页留言哈!
 

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.util.DateUtils;
import com.util.JacksonUtil;

import java.util.*;

/**
* @Description:
* @Author: xiaofeng
* @CreateDate: 2019/8/28 23:11
*/
public class tests {

   public static void main(String[] args) {
       new tests().run();
   }


   public void run(){
      List<A> arr1 = new ArrayList<>();
      A a1 = new A();
      a1.setName("张三");
      a1.setTime(DateUtils.getFormatDate("2019-09-04 12:11:00","yyyy-MM-dd HH:mm:ss"));
      a1.setZjhm("330327199107186098");
      arr1.add(a1);

      A a2 = new A();
      a2.setName("李四");
      a2.setTime(DateUtils.getFormatDate("2020-07-04 12:11:00","yyyy-MM-dd HH:mm:ss"));
      a2.setZjhm("330321888384752344");
      arr1.add(a2);


      A a3 = new A();
      a3.setName("张三");
      a3.setTime(DateUtils.getFormatDate("2019-10-05 12:11:00","yyyy-MM-dd HH:mm:ss"));
      a3.setZjhm("330327199107186098");
      arr1.add(a1);

      A a4 = new A();
      a4.setName("李四");
      a4.setTime(DateUtils.getFormatDate("2020-08-05 12:11:00","yyyy-MM-dd HH:mm:ss"));
      a4.setZjhm("330321888384752344");
      arr1.add(a2);

      //再加一个字段名不一样的
      List<B> arr2 = new ArrayList<>();
      B b1 = new B();
      b1.setAge("王五");
      b1.setDate(new Date());
      b1.setSfzh("33039292485824222");
      arr2.add(b1);

      //再加一个字段名不一样的
      B b2 = new B();
      b2.setAge("王六");
      b2.setDate(new Date());
      b2.setSfzh("33032818343298329");
      arr2.add(b2);

      List<P> allList = new ArrayList<>();

      allList.addAll(arr1);
      allList.addAll(arr2);


      Map<String,List<P>> map = new HashMap<>();
      for (P p: allList) {
          List<P> list = map.get(p.getZjhm());
          if(null == list){
              list = new ArrayList<>();
                  map.put(p.getZjhm(),list);
              }
              list.add(p);
           }
      ObjectMapper mapper = new ObjectMapper();
      for (String sfzh:
         map.keySet()) {
         List<P> l =map.get(sfzh);
          l.sort((P o1,P o2)-> o1.getTime().after(o2.getTime())?-1:1);
          System.out.println(sfzh+"="+JacksonUtil.bean2Json(l.get(0)));
      }

      interface P{
            Date getTime();
            String getZjhm();
      }
      class A implements P{
            private String name;
            private Date time;
            private String zjhm;

      public String getZjhm() {
            return zjhm;
}

public void setZjhm(String zjhm) {
this.zjhm = zjhm;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Date getTime() {
return time;
}

public void setTime(Date time) {
this.time = time;
}
}

class B implements P{
@Override
public Date getTime() {
return this.date;
}

@Override
public String getZjhm() {
return this.sfzh;
}

private String age;
private Date date;
private String sfzh;
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getSfzh() {
return sfzh;
}

public void setSfzh(String sfzh) {
this.sfzh = sfzh;
}

public String getAge() {
return age;
}

public void setAge(String age) {
this.age = age;
}

public Date getDate() {
return date;
}

public void setDate(Date date) {
this.date = date;
}
}

class C implements P{
private String number;
private String dateTime;
private boolean hello;
private String idcard;
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String getZjhm() {
return this.idcard;
}

public String getIdcard() {
return idcard;
}

public void setIdcard(String idcard) {
this.idcard = idcard;
}

public String getNumber() {
return number;
}

public void setNumber(String number) {
this.number = number;
}

public String getDateTime() {
return dateTime;
}

public void setDateTime(String dateTime) {
this.dateTime = dateTime;
}

public boolean isHello() {
return hello;
}

public void setHello(boolean hello) {
this.hello = hello;
}

@Override
public Date getTime() {
return DateUtils.getFormatDate(this.dateTime,"yyyy-MM-dd HH:mm:ss");
}
}


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值