使用compare方法的ArrayList desending顺序

时间:2015-08-14 10:44:29

标签: java arraylist

我想根据日期的降序比较和准备一个数组列表,我使用下面的代码但得到升序的结果。

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

请帮忙

非常感谢

3 个答案:

答案 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比较器。