如何按时间戳对List中的String []进行排序?

时间:2017-08-29 07:50:57

标签: java sorting comparable

String[]

2017-03-14 18:22:44.149项看起来像这样:

  1. 职位:姓名(字符串)
  2. 职位:url = '/sources/data/' + $('#source_id').val() + '/' + $(this).val(); (字符串)
  3. 为了按时间戳降序对列表进行排序,有什么好方法?我在没有创建新对象的情况下搜索解决方案。

3 个答案:

答案 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]);
    }
});

请注意,我需要按此顺序将o2o1进行比较,或者否定将o1o2进行比较的结果,以便对数据进行降序排序。这在第一种方法中变得更加明显。

答案 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);
    }
});