闲着没事,抽个时间写写平时积累的一些小东西哈。在一次项目中遇到多个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");
}
}
}