按日期以MM / DD / YYYY格式对arraylist进行排序

时间:2016-11-14 09:34:31

标签: java sorting date collections

我的日期字段(字符串)格式(MM / DD / YYYY)来自服务电话。 我的要求是按日期排序,按最新日期显示记录。

我已尝试过以下代码。但我无法按最新日期显示记录。

public class Test {

        public static void main(String[] args) {
            List<Opportunity> oppList = new ArrayList<Opportunity>();
            Opportunity opp1 = new Opportunity();
            opp1.setName("opp1");
            opp1.setExpires("11/07/2016");
            Opportunity opp2 = new Opportunity();
            opp2.setName("opp2");
            opp2.setExpires("11/08/2016");
            oppList.add(opp1);
            oppList.add(opp2);
            List<Opportunity> opplist=sortOpportunitiesByDate(oppList);
            /*Collections.sort(oppList);*/
            for(int i=0; i<opplist.size(); i++){
                System.out.println("Opportunity Data>>>"+opplist.get(i).getExpires());

            }

        }
        private static List<Opportunity> sortOpportunitiesByDate(List<Opportunity> opportunities) {
              Collections.sort(opportunities, new Comparator<Opportunity>() {
              public int compare(Opportunity o1, Opportunity o2) {
                  DateFormat format = new SimpleDateFormat("MM/DD/YYYY",Locale.US);

                    Date date1 = null;
                    Date date2 = null;
                    try {
                        date1=format.parse(o1.getExpires());
                        date2=format.parse(o2.getExpires());

                    } catch (ParseException e) {
                        e.printStackTrace();
                    }

                  return date1.compareTo(date2);
              }
            });

         return opportunities;
        }


    }

实际输出:

Opportunity Date>>>11/07/2016
Opportunity Date>>>11/08/2016

预期产出:

Opportunity Date>>>11/08/2016
Opportunity Date>>>11/07/2016

3 个答案:

答案 0 :(得分:4)

因为DateFormat格式为“YYYY” 将MM/DD/YYYY更改为MM/DD/yyyy将有效

答案 1 :(得分:3)

您正在从较旧的日期到较新的日期排序,这是好的, 如果你需要颠倒,那么通过这样做来反转比较标准:

return date2.compareTo(date1);

另一种方法是将排序列表变为...

第一种然后执行Collections.reverse();

编辑:

我尝试使用您的代码,原因是格式定义不明确,因此日期错误

试试这个:

 DateFormat format = new SimpleDateFormat("MM/dd/yyyy");
 Date date1 = null;
 Date date2 = null;
 try {
      date1 = format.parse(o1);
      date2 = format.parse(o2);
 } catch (ParseException e) {
      e.printStackTrace();
 }

                return date2.compareTo(date1);

答案 2 :(得分:1)

在java 8中,你可以用这种方式编写它。

请注意我已经使用了apache CompareToBuilder。

Collections.sort(opportunities,
            Collections.reverseOrder((item1, item2) -> new CompareToBuilder()
                    .append(item1.getExpires(), item2.getExpires()).toComparison()));