通用的按时间排序

Posted on 2019-07-23 15:54  嘿!!!!  阅读(425)  评论(1编辑  收藏  举报

一天学一点,一年学365点,加油

1、先准备一个实体类

public class User {

private String name;

private String age;

public User(){}

public User(String name, String age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

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

public String getAge() {
return age;
}

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

2、重写时间排序的方法(这里的@Override可能会报错,需要改下JDK,1.5不支持重写接口)
public static<T> void ListSort(List<T> list, final String str){
Collections.sort(list, new Comparator<T>() {
@Override
public int compare(T t1, T t2) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
Date dt1 = toDate((String)Test2.getObject(t1,str));
Date dt2 = toDate((String)Test2.getObject(t2,str));
if (dt1.getTime() > dt2.getTime()) {
return -1;
} else if (dt1.getTime() < dt2.getTime()) {
return 1;
} else {
return 0;
}
} catch (Exception e) {
return 1;
}

}
});
}
3、现在我要通过反射获取到我需要的值,我写了两种方法
/**
* 通过对象的字节码对象获取属性值
* @param str 方法名
* @param t 对象
* @param <T>
* @return
*/
public static <T> Object test(String str, T t) {
//动态加载类,获取当前类的Class对象
Class cla = t.getClass();
//获取类名称为Str的方法
try {
Method method = cla.getMethod(str);
return method.invoke(t);
} catch (Exception e) {
e.printStackTrace();
return "出现异常";
}
}

/**
* 暴力反射获取对象属性值
* @param t 对象
* @param name 属性名
* @param <T>
* @return
*/
public static <T> Object getObject(T t, String name) {
try {
Field declaredField = t.getClass().getDeclaredField(name);

declaredField.setAccessible(true);

return declaredField.get(t);
} catch (Exception e) {
e.printStackTrace();
return "出现异常";
}

}

4、因为我时间对象是String的所以需要格式化一下
public static Date toDate(String str) {
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat sDateFormat=new SimpleDateFormat("yyyy-MM-dd");
//必须捕获异常
try {
Date date=simpleDateFormat.parse(str);
return date;
} catch(ParseException px) {
px.printStackTrace();
}
return null;
}
5、现在可以愉快的测试了
public static void main(String[] args) {

List<User> list = new ArrayList<User>();
User g1 = new User("1111111","20181112");
User g2 = new User("22222222","20171118");
User g3 = new User("333333333","20191119");

list.add(g1);
list.add(g2);
list.add(g3);
System.out.println("********排序前*******");
for (User user : list) {
System.out.println(user.getName());
}
ListSort(list,"age");
System.out.println("******排序后*****");
for (User user : list) {
System.out.println(user.getName());
}
}
6、结果

********排序前*******
1111111
22222222
333333333
******排序后*****
333333333
1111111
22222222