String[]
2017-03-14 18:22:44.149
项看起来像这样:
url = '/sources/data/' + $('#source_id').val() + '/' + $(this).val();
(字符串)为了按时间戳降序对列表进行排序,有什么好方法?我在没有创建新对象的情况下搜索解决方案。
答案 0 :(得分: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]);
}
});
请注意,我需要按此顺序将o2
与o1
进行比较,或者否定将o1
与o2
进行比较的结果,以便对数据进行降序排序。这在第一种方法中变得更加明显。
答案 1 :(得分: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));
答案 2 :(得分: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);
}
});