如何按日期对数组数组进行排序?

时间:2016-07-05 18:16:34

标签: java android arrays

在我的Android应用程序中,我试图获得一个排序数组。我有一个带有名称字符串和日期字符串的数组数组。我试图根据日期对名称进行排序。像这样的东西:

private void sortList() {
    String[][] namesAndDatesList = new String[][] {
                new String[] {"name1", "05/03/2016 02:11:33")}
            ,   new String[] {"name2", "04/03/2016 02:11:34"}
            ,   new String[] {"name3", "04/03/2016 02:11:33")}
            ,   new String[] {"name4", "02/03/2016 02:11:33")}
            ,   new String[] {"name5", "05/03/2016 02:11:38")}
    };

    String[] namesList = Collections.sort(namesAndDatesList, new StringDateComparator());

}

class StringDateComparator implements Comparator<String>
{
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
    public int compare(params)
    {
        try {
            // return something
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }
}

我希望输出按日期和时间排序的名称,如:

namesList = {name4, name3, name2, name1, name5}

我不知道该怎么做。

3 个答案:

答案 0 :(得分:2)

您应该将字符串解析为日期然后进行比较,对于Android,您可以使用Arrays.sort方法并传递匿名比较器

实施例

private void sort2dArray() {
String[][] namesAndDatesList = new String[][] { new String[] { "name1", "05/03/2016 02:11:33" },
    new String[] { "name2", "04/03/2016 02:11:34" }, new String[] { "name3", "04/03/2016 02:11:33" },
    new String[] { "name4", "02/03/2016 02:11:33" }, new String[] { "name5", "05/03/2016 02:11:38" } };

Arrays.sort(namesAndDatesList, new Comparator<String[]>() {

    @Override
    public int compare(String[] o1, String[] o2) {

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    Date d1 = null;
    Date d2 = null;
    try {
        d1 = sdf.parse(o1[1]);
        d2 = sdf.parse(o2[1]);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return d1.compareTo(d2);
    }
});
System.out.println(Arrays.deepToString(namesAndDatesList));
}

答案 1 :(得分:1)

这似乎是您正在寻找的:java Arrays.sort 2d array

或者,您可以创建一个包含两个属性(name,date)的自定义类,然后创建一个实现Comparator的CustomClassComparator。

答案 2 :(得分:0)

java.time

accepted answer是正确的,但使用过时的类作为问题。 java.util.Date类被Java 8及更高版本中内置的java.time框架取代。这些类取代了旧的麻烦的日期时间类,如java.util.Date。见Oracle Tutorial。许多功能已经被后端移植到Java 6&amp; ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。

使用java.util.Date类的代码意味着数据输入位于UTC时区。但我们不能单独根据给定的数据做出这种假设。更合适的是LocalDateTime类,它故意缺少任何offset-from-UTC或时区信息。

String input = "04/03/2016 02:11:34";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy HH:mm:ss" );
LocalDateTime ldt = LocalDateTime.parse( input , formatter );

该答案中的其余逻辑保持不变。 LocalDateTime类实现了compareTo