如何按时间戳对 List 中的 String[] 进行排序?
How to sort String[] in List by timestamp?
List<String[]> data = Importer.readCsv("test.csv");
String[]
项如下所示:
- 职位:姓名(字符串)
- 位置:
2017-03-14 18:22:44.149
(字符串)
按时间戳降序对列表进行排序的好方法是什么?我在不创建新对象的情况下搜索解决方案。
使用 Collection.sort() 和 Comparator.comparing(),我发现这些在稍后回过头来时很容易阅读:
data.sort(Comparator.comparing((String[] o) -> o[1]).reversed());
您可以在不转换的情况下比较时间戳,因为格式是 "correctly" 对字段进行排序。
如果您限于 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
的结果以降序排列数据。这在第一种方法中变得更加明显。
您可以使用自定义 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));
嗯,非常感谢你的建议和冲动。
特别感谢 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);
}
});
List<String[]> data = Importer.readCsv("test.csv");
String[]
项如下所示:
- 职位:姓名(字符串)
- 位置:
2017-03-14 18:22:44.149
(字符串)
按时间戳降序对列表进行排序的好方法是什么?我在不创建新对象的情况下搜索解决方案。
使用 Collection.sort() 和 Comparator.comparing(),我发现这些在稍后回过头来时很容易阅读:
data.sort(Comparator.comparing((String[] o) -> o[1]).reversed());
您可以在不转换的情况下比较时间戳,因为格式是 "correctly" 对字段进行排序。
如果您限于 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
的结果以降序排列数据。这在第一种方法中变得更加明显。
您可以使用自定义 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));
嗯,非常感谢你的建议和冲动。 特别感谢 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);
}
});