List<String[]> data = Importer.readCsv("test.csv");
一個String[]
項目看起來是這樣的:如何使用時間戳對List中的String []進行排序?
- 位置:名稱(字符串)
- 位置:
2017-03-14 18:22:44.149
(字符串)
什麼是爲了對列表進行排序的好方法按時間戳降序?我在不創建新對象的情況下搜索解決方案。
List<String[]> data = Importer.readCsv("test.csv");
一個String[]
項目看起來是這樣的:如何使用時間戳對List中的String []進行排序?
2017-03-14 18:22:44.149
(字符串)什麼是爲了對列表進行排序的好方法按時間戳降序?我在不創建新對象的情況下搜索解決方案。
使用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]);
}
});
注意,我需要在此爲了比較o2
到o1
或否定比較o1
到o2
到的結果命令數據下降。這在第一種方法中變得更加明顯。
我想這是一個Java 8的解決方案? – lidox
是的,所有這些方法都是在Java 8中引入的。我將添加一個Java 7解決方案。 –
您可以使用自定義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));
考慮日期格式似乎過分。 – shmosel
好,非常感謝你對你的建議和衝動。 特別鳴謝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);
}
});
不能你做對象的列表?這是一個更好的方法 –
我可以,但後來我必須使用使用數組的函數。所以後來必須將對象轉換回 – lidox
[如何在Java中對ArrayList進行排序]的可能重複(https://stackoverflow.com/questions/18441846/how-to-sort-an-arraylist-in-java) – AxelH