2017-08-29 59 views
-1
List<String[]> data = Importer.readCsv("test.csv"); 

一個String[]項目看起來是這樣的:如何使用時間戳對List中的String []進行排序?

  1. 位置:名稱(字符串)
  2. 位置:2017-03-14 18:22:44.149(字符串)

什麼是爲了對列表進行排序的好方法按時間戳降序?我在不創建新對象的情況下搜索解決方案。

+4

不能你做對象的列表?這是一個更好的方法 –

+1

我可以,但後來我必須使用使用數組的函數。所以後來必須將對象轉換回 – lidox

+0

[如何在Java中對ArrayList進行排序]的可能重複(https://stackoverflow.com/questions/18441846/how-to-sort-an-arraylist-in-java) – AxelH

回答

3

使用Collection.sort()和Comparator.comparing(),我發現那些易於以後回來,就當閱讀:

data.sort(Comparator.comparing((String[] o) -> o[1]).reversed()); 

您可以比較時間戳沒有轉換,格式爲「正確「排列字段。


如果你被限制在Java 7中,將會有更多的樣板:

Collections.sort(data, new Comparator<String[]>() 
{ 
    @Override 
    public int compare(String[] o1, String[] o2) 
    { 
     return o2[1].compareTo(o1[1]); 
     // return -o1[1].compareTo(o2[1]); 
    } 
}); 

注意,我需要在此爲了比較o2o1或否定比較o1o2到的結果命令數據下降。這在第一種方法中變得更加明顯。

+0

我想這是一個Java 8的解決方案? – lidox

+0

是的,所有這些方法都是在Java 8中引入的。我將添加一個Java 7解決方案。 –

1

您可以使用自定義Comparator,它取每個陣列中的第二個元素並將其轉換爲Timestamp。請注意,比較器的功能不能拋出異常,所以你必須抓住潛在ParseException和對付它:

Function<String[], Date> parser = s -> { 
    try { 
     return new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS").parse(s[1]); 
    } catch (ParseException e) { 
     return null; 
    } 
}; 

list.sort(Comparator.comparing(parser)); 
+0

考慮日期格式似乎過分。 – shmosel

0

好,非常感謝你對你的建議和衝動。 特別鳴謝XtremeBaumer! 下面的代碼做這項工作太:

List<String[]> data = importer.readCsv(context, csvFile); 


Collections.sort(data, new Comparator<String[]>() { 
    @Override 
    public int compare(String[] item1, String[] item2) { 

     String dateString1 = item1[1]; 
     String dateString2 = item2[1]; 

     SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

     Date date1 = null; 
     Date date2 = null; 

     try { 
      date1 = format.parse(dateString1); 
      date2 = format.parse(dateString2); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
      return 0; 
     } 

     // dateString1 is an earlier date than dateString2 
     return date1.compareTo(date2); 
    } 
}); 
相關問題