2017-06-20 3 views
-1

これは正確にThisと重複していますが、1つのトリッキーな違いがあります。 私は、Webサービスからの値で更新される 'LOBServiceRequestDetails'型のArrayListを持っています。 LOBServiceRequestDetailsのvarriablesのいくつかは、以下の通りですArrayListを文字列形式の日付に従って並べ替える方法は?

  • のString#は
  • のString#のCreationDate AGENTID(DD/MM/YYYYのhh:mm:ss形式)

は私が応じ、このリストをソートしたいのto creationDate。私が持っている1つの方法は、LOBServiceRequestDetailsモデルクラスでComparableを実装し、compareToメソッドをオーバーライドすることですが、いくつかの問題が原因でこのクラスを変更することはできません。だから私は、次のようにCollection.sortを使用しました:

 DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); 
    Collections.sort(lOBServiceRequestDetailsList, new Comparator<LOBServiceRequestDetails>() { 
      public int compare(LOBServiceRequestDetails o1, LOBServiceRequestDetails o2) { 
       if (o1.getCreationDate() == null || o2.getCreationDate() == null) 
        return 0; 
       try{ 
        return sdf.parse(o1.getCreationDate()).compareTo(sdf.parse(o2.getCreationDate())); 
       } catch (ParseException e) { 
        throw new IllegalArgumentException(e); 
       } 
      } 
     }); 

しかし、これは期待どおりに動作していません。どんな助けもありがとうございます。

[LOBServiceRequestDetails [CreationDateプロパティ= 22/05/2017 10時31分20秒、agentIdが= AG11]、LOBServiceRequestDetails [CreationDateプロパティ= 7月2日/ 2017年午前11時10分20秒:出力予想

、agentId = ag12]、LOBServiceRequestDetails [creationDate = 06/12/2016 12:51:20、agentId = ag13]、LOBServiceRequestDetails [creationDate = 17/12/2015 06:44:20、agentId = ag14]]

実際の出力:

[LOBServiceRequestDetails [CreationDateプロパティ= 6月12日/ 2016年11時10分20秒、agentIdが= AG11]、LOBServiceRequestDetails [=/2015分の12 17 6時44分20秒、agentIdが= AG12]、LOBServiceRequestDetails CreationDateプロパティ[あなたが使用しているのCreationDate = 7月2日/ 2017年11時10分20秒、agentIdが= AG13]、LOBServiceRequestDetails [のCreationDate = 22/05/2017年10時31分20秒、agentIdが= AG14]]

+0

正確に何を働いていませんか? –

+1

あなたはcompareToの両側でo1.getCreationDate()を使用しています –

+0

@DavisMolinari編集済みのコードですがまだソートされていませんリスト –

答えて

1

compareToの両側のo1.getCreationDate():

return sdf.parse(o1.getCreationDate()).compareTo(sdf.parse(o1.getCreationDate())); 

編集:この固定された1つの問題ですが、 "OH GOD SPIDERS"のコメントで説明されているように、2つの日付のうちの1つがnullの場合、それらは等しいと見なされるため、null値が処理される方法でエラーが発生します。 ます。たとえば、このようにあなたの状態を変更する場合:

   if (o1.getCreationDate() == null) return 1; 
       if (o2.getCreationDate() == null) return -1; 
      try{... 

を使用すると、null値がリストの最後に置かれることを得ます。出力の

スクリーンショットは、あなたの期待される結果に一致 enter image description here

+0

編集されたコードですが、まだソートされていないリストです。 –

+0

@VikasYadav正しいコードを(o2で)試してみましたが、期待通りに動作しています –

+0

@DavisMolinariはあなたのテストデータに 'null'だった日付を含んでいましたか? –

関連する問題