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

Java 如何按日期对数组进行排序?,java,android,arrays,Java,Android,Arrays,在我的android应用程序中,我试图得到一个排序数组。我有一个数组,包含一个名称字符串和一个日期字符串。我正试着根据日期对名字进行排序。大概是这样的: private void sortList() { String[][] namesAndDatesList = new String[][] { new String[] {"name1", "05/03/2016 02:11:33")} , new String[] {"n

在我的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;
    }
}

我不知道该怎么做。

这似乎就是你想要的:


或者,您可以创建一个具有两个属性(名称、日期)的自定义类,然后创建一个实现Comparator的CustomClassComparator。

这似乎就是您要寻找的:


或者,您可以创建一个具有两个属性(名称、日期)的自定义类,然后创建一个实现Comparator的CustomClassComparator。

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

例子:
private void sort2dArray(){
字符串[][]名称和日期列表=新字符串[][]{新字符串[]{“名称1”,“05/03/2016 02:11:33”},
新字符串[]{“name2”,“04/03/2016 02:11:34”},新字符串[]{“name3”,“04/03/2016 02:11:33”},
新字符串[]{“name4”,“02/03/2016 02:11:33”},新字符串[]{“name5”,“05/03/2016 02:11:38”};
sort(namesAndDatesList,newcomparator(){
@凌驾
公共整数比较(字符串[]o1,字符串[]o2){
SimpleDataFormat sdf=新的SimpleDataFormat(“dd/MM/yyyy HH:MM:ss”);
日期d1=空;
日期d2=空;
试一试{
d1=sdf.parse(o1[1]);
d2=sdf.parse(o2[1]);
}捕获(解析异常){
e、 printStackTrace();
}
返回d1。比较(d2);
}
});
System.out.println(Arrays.deepToString(namesAndDatesList));
}

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

例子:
private void sort2dArray(){
字符串[][]名称和日期列表=新字符串[][]{新字符串[]{“名称1”,“05/03/2016 02:11:33”},
新字符串[]{“name2”,“04/03/2016 02:11:34”},新字符串[]{“name3”,“04/03/2016 02:11:33”},
新字符串[]{“name4”,“02/03/2016 02:11:33”},新字符串[]{“name5”,“05/03/2016 02:11:38”};
sort(namesAndDatesList,newcomparator(){
@凌驾
公共整数比较(字符串[]o1,字符串[]o2){
SimpleDataFormat sdf=新的SimpleDataFormat(“dd/MM/yyyy HH:MM:ss”);
日期d1=空;
日期d2=空;
试一试{
d1=sdf.parse(o1[1]);
d2=sdf.parse(o2[1]);
}捕获(解析异常){
e、 printStackTrace();
}
返回d1。比较(d2);
}
});
System.out.println(Arrays.deepToString(namesAndDatesList));
}
java.time 是正确的,但在问题中使用了过时的类。
java.util.Date
类被内置在Java8和更高版本中的框架所取代。这些类取代了旧的麻烦的日期时间类,如
java.util.date
。看见许多功能已在中向后移植到Java6和Java7,并在中进一步适应Android

使用
java.util.Date
类的代码意味着数据输入位于时区。但我们不能仅从给定的数据做出这一假设。因此,更合适的是故意缺少任何或时区信息的类

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
类实现。

java.time 是正确的,但在问题中使用了过时的类。
java.util.Date
类被内置在Java8和更高版本中的框架所取代。这些类取代了旧的麻烦的日期时间类,如
java.util.date
。看见许多功能已在中向后移植到Java6和Java7,并在中进一步适应Android

使用
java.util.Date
类的代码意味着数据输入位于时区。但我们不能仅从给定的数据做出这一假设。因此,更合适的是故意缺少任何或时区信息的类

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
类实现。

对于初学者,您尝试做两件事。对数组进行排序,然后从子数组中提取一个信息。这是不可能的吗?在一个竞争对手?我当然可以在分类后提取名字,因为这不是比较器所做的。您确实需要首先排序,然后提取所需的值。对于初学者,您正在尝试做两件事。对数组进行排序,然后从子数组中提取一个信息。这是不可能的吗?在一个竞争对手?我当然可以在分类后提取名字,因为这不是比较器所做的。您确实需要先排序,然后提取所需的值我已经尝试实现了这一点,但问题是o1和o2被定义为数组中的第一项,因此它试图比较名称而不是日期。我需要改变什么来解决这个问题?不。。。o1[1]和o2[1]是字符串中的元素2(在索引1处)……在实现代码时遇到了一些问题,这是我没有发布的问题的原因,但我设法用您的代码修复了它们。谢谢将您的答案标记为正确我已尝试实现此功能,但问题是o1和o2被定义为数组中的第一项,因此它尝试比较名称而不是日期。我需要改变什么来解决这个问题?不。。。o1[1]和o2[1]是字符串中的元素2(在索引1处)……在实现代码时遇到了一些问题,这是我没有发布的问题的原因,但我设法用您的代码修复了它们。谢谢把你的答案标记为正确
String input = "04/03/2016 02:11:34";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy HH:mm:ss" );
LocalDateTime ldt = LocalDateTime.parse( input , formatter );