我想根据日期的降序比较和准备一个数组列表,我使用下面的代码但得到升序的结果。
public static void main(String[] args) {
//HistoryBank(String amount, String date, String month)
ArrayList<HistoryBank> arraylist = new ArrayList<HistoryBank>();
arraylist.add(new HistoryBank("223", "20141111", "20141111"));
arraylist.add(new HistoryBank("245", "20131111", "20131111"));
arraylist.add(new HistoryBank("209", "20151111", "20151111"));
Collections.sort(arraylist, new Comparator<HistoryBank>() {
public int compare(HistoryBank s1, HistoryBank s2) {
return Integer.valueOf(s1.getDate())
.compareTo(Integer.valueOf(s2.getDate()));
}
});
for(HistoryBank str: arraylist){
System.out.println(str.getDate());
}
}
我的结果是
20131111
20141111
20151111
但我希望结果按降序排列,如
20151111
20141111
20131111
请帮忙
非常感谢答案 0 :(得分:3)
只需反转比较方法中的参数(即将s2.getDate()
与s1.getDate()
进行比较):
Collections.sort(arraylist, new Comparator<HistoryBank>() {
public int compare(HistoryBank s1, HistoryBank s2) {
return Integer.valueOf(s2.getDate())
.compareTo(Integer.valueOf(s1.getDate()));
}
});
答案 1 :(得分:0)
如果您正在处理已经存在但无法改变的Comparators
,那么还有Collections.reverse(List);
和Collections.reverseOrder(Comparator);
。
答案 2 :(得分:0)
两个选项:
如果您已有排序列表,请使用Collections.reverse:
创建一个返回与原始对象相反的Comparator
。更好的是,创建一个Comparator
来获取原始Comparator
并更改返回值的符号。更好的是,使用已经内置的Collections.reverseOrder比较器。