2016-11-14 19 views
2

書式(MM/DD/YYYY)の日付フィールド(文字列)はサービスコールから取得しています。 私の要件は、日付でリストをソートし、最新の日付でレコードを表示することです。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 
+2

日に動作しますが、関係なく、あなたがフォーマットされたかの日付ではありませんので、あなたはそれをソートするために、その後、比較する必要があります。.. –

+1

試してみますcompareTo()をdate2を使用して呼び出し、date1を渡します。 –

+0

私もその方法を試しました。それは動作しません。 – String

答えて

4

形式MM/DD/yyyyにごDateFormat 変更MM/DD/YYYYで「YYYY」は

+0

ありがとうございました。今はうまくいきます – String

3

あなたは大丈夫です、新しい日付に古いから、ソートされ、 あなたが逆さまに必要がある場合は、その後反転を行います比較基準は次のようにして行います。

return date2.compareTo(date1); 

行くための別の方法は

第一ソートは、次にやる...ソートされたリストinverteある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); 
+0

return date2.compareTo(date1);これも動作していません。私はそれを試しました – String

+0

ありがとうございました。今働いています – String

+0

あなたは歓迎です –

1

のJava 8では、あなたがこの方法でそれを書くことができます。..

私はApacheのCompareToBuilderを使用しています。

Collections.sort(opportunities, 
      Collections.reverseOrder((item1, item2) -> new CompareToBuilder() 
        .append(item1.getExpires(), item2.getExpires()).toComparison())); 
関連する問題