【问题标题】:Sorting arraylist by date in MM/DD/YYYY Format以 MM/DD/YYYY 格式按日期对数组列表进行排序
【发布时间】:2016-11-14 09:34:30
【问题描述】:

我有格式(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

【问题讨论】:

  • 一个日期是一个日期,无论你如何格式化,你需要比较然后才能对其进行排序..
  • 尝试使用 date2 调用 compareTo() 并传入 date1
  • 我也试过这种方式。它不起作用
  • 为什么不将expire 存储为LocalDateopp.setExpires(LocalDate.of(2016, 7, 11));

标签: java sorting date collections


【解决方案1】:

因为DateFormat 中的格式为“YYYY” 将 MM/DD/YYYY 更改为 MM/DD/yyyy 即可

【讨论】:

    【解决方案2】:

    您正在从旧日期排序到新日期,这没关系, 如果您需要倒置,请通过以下操作反转比较标准:

    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);
    

    【讨论】:

    • return date2.compareTo(date1);这个也不行,我试过了
    【解决方案3】:

    在java 8中你可以这样写..

    请注意,我使用的是 apache CompareToBuilder。

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

    【讨论】:

      猜你喜欢
      • 2017-10-06
      • 2014-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多