Я хочу, чтобы мой список будет отсортирован на основе Date
переменных, так что я должен написать эту логикуJava ArrayList Дата переменная Сортировка?
public static void main(String a[]){
AuditLogComponent comp = new AuditLogComponent();
List<TableRecord> records = new ArrayList<TableRecord>();
LogFolderRecord log = new LogFolderRecord();
Date date = new Date();
Timestamp fromTS1 = new Timestamp(date.getTime());
log.setStampDate(fromTS1);
records.add(log);
Date date1 = new Date();
Timestamp fromTS2 = new Timestamp(date1.getTime());
LogFolderRecord log1 = new LogFolderRecord();
log1.setStampDate(fromTS2);
records.add(log1);
records.add(new LogPeopleRecord());
comp.columnsList(records);
}
И как я звоню метод сортировки списка
public void columnsList(List<TableRecord> records){
Collections.sort(records, new StampDateComparator());
for(TableRecord record : records){
Table table = record.getTable();
Field[] fields = table.fields();
for(Field field : fields){
field.getName();
record.getValue(field);
}
}
}
И мой класс компаратора
public class StampDateComparator implements Comparator<Object> {
@Override
public int compare(Object object1, Object object2) {
try {
Method method = object1.getClass().getDeclaredMethod("getStampDate");
Date value = (Date) method.invoke(object1);
Method method1 = object1.getClass().getDeclaredMethod("getStampDate");
Date value1 = (Date) method.invoke(object2);
if(value != null && value1 != null)
return value.compareTo(value1);;
} catch (SecurityException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
Но это не бросает исключение,
java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.csdcsystems.amanda.comp.macro.StampDateComparator.compare(StampDateComparator.java:22)
at java.util.TimSort.countRunAndMakeAscending(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
Что такое точный способ сортировки по дате?
вам нужно реализовать 'компаратор' и 'не object' –
принять помощь от этого. http://www.thejavageek.com/2013/06/17/sorting-user-defined-objects-part-2/ –
Зачем использовать отражение? Почему бы просто не использовать дженерики, поскольку они предположительно должны быть или отнесены к соответствующему типу (после проверки)? – MadProgrammer