我有List
个数组,其中每个数组的第五个元素(array[4]
)的类型为Date
,每个数组的第四个元素(array[3]
)是类型为String
。我试图根据日期排序List
,然后是字符串。我使用Collections.sort()
使用自定义Comparator
进行了尝试,但没有成功:
List <Object[]> execute(List <Object[]> resultList){
Collections.sort(resultList, new Comparator<Object[]>() {
public int compare(Object[] array, Object[] otherArray) {
int dateComparison = array[4].compareTo(otherArray[4]);
return dateComparison == 0 ? array[3].compareTo(otherArray[3]) : dateComparison;
}
});
return resultList;
}
输入
02.02.2017 10:00 B
02.02.2017 09:00 A
01.02.2017 18:00 AC
01.02.2017 16:00 AB
02.02.2017 11:00 C
01.02.2017 13:00 AA
02.02.2017 12:00 D
01.02.2017 21:00 AD
输出应为 - &gt;
01.02.2017 13:00 AA
01.02.2017 16:00 AB
01.02.2017 18:00 AC
01.02.2017 21:00 AD
02.02.2017 09:00 A
02.02.2017 10:00 B
02.02.2017 11:00 C
02.02.2017 12:00 D
EDIT1
我已经实现了一个简单的例子:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
public class Comperable {
public static void main(String[] args) {
try {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<Object[]> resultList = new ArrayList<Object[]>();
Object[] array1 = { dateFormat.parse("2017-02-25 16:10:00.0"), "C" };
Object[] array2 = { dateFormat.parse("2017-02-20 16:50:00.0"), "CB" };
Object[] array3 = { dateFormat.parse("2017-02-19 19:42:00.0"), "AB" };
Object[] array4 = { dateFormat.parse("2017-02-20 19:46:00.0"), "BA" };
Object[] array5 = { dateFormat.parse("2017-02-16 19:33:58.0"), "ZC" };
Object[] array6 = { dateFormat.parse("2017-02-16 19:45:10.0"), "A" };
Object[] array7 = { dateFormat.parse("2017-02-16 20:47:48.0"), "B" };
resultList.add(array1);
resultList.add(array2);
resultList.add(array3);
resultList.add(array4);
resultList.add(array5);
resultList.add(array6);
resultList.add(array7);
Collections.sort(resultList, new Comparator<Object[]>() {
public int compare(Object[] array, Object[] otherArray) {
int dateComparison = (((Date) array[0]).compareTo((Date) otherArray[0]));
return dateComparison == 0 ? ((String) array[1]).compareTo((String) otherArray[1]) : dateComparison;
}
});
for (int i = 0; i <= resultList.size() - 1; i++) {
Object[] row = resultList.get(i);
System.out.println("Date: " + row[0] + " name: " + row[1]);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:2)
主要的是您需要将Object
类型转换为Date
类型并调用compareTo
方法。
(1)将array[4]
和otherArray[4]
的类型转换为日期类型,然后调用compareTo
(2)此外,将array[3]
和otherArray[3]
的类型转换为String
类型,然后调用compareTo
您可以使用内联注释参考以下代码:
Collections.sort(resultList, new Comparator<Object[]>() {
public int compare(Object[] array, Object[] otherArray) {
//do the Date comparison by casting Object to Date
int dateComparison = (((Date)array[4]).compareTo((Date)otherArray[4]));
//Now, do the String comparison by casting Object to String
return dateComparison == 0 ?
((String)array[3]).compareTo((String)otherArray[3]) : dateComparison;
}
});
我想在日期之后对列表进行排序,然后在String之后对其进行排序 我想在jasper报告中打印数据。在我的情况下,我不能 管理数据库中的排序。
以上代码完全相同,它首先比较Date对象,如果它们相等则会比较字符串。