如何对ArrayList进行排序包括Date和String?

rea*_*ser 2 java

我想按日期排序我的ArrayList.我的ArrayList为:

10 June - name
15 April - name
23 July - name
03 March - name
Run Code Online (Sandbox Code Playgroud)

它有日,月和字符串名称.我如何按日期排序?

谢谢

aio*_*obe 6

正如@The Elite Gentleman所指出的,你应该使用自定义比较器.这是一个完整的例子:

import java.text.*;
import java.util.*;
public class Test {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>(
                Arrays.asList("10 June - name", 
                              "15 April - name", 
                              "23 July - name", 
                              "03 March - name"));

        // Print list before sorting.
        System.out.println(list);

        // Sort list according to date.
        Collections.sort(list, new Comparator<String>() {
            DateFormat df = new SimpleDateFormat("dd MMM");
            @Override
            public int compare(String s1, String s2) {
                try {
                    Date d1 = df.parse(s1.split("-")[0].trim());
                    Date d2 = df.parse(s2.split("-")[0].trim());
                    return d1.compareTo(d2);
                } catch (ParseException pe) {
                    System.out.println("erro: " + pe);
                    return 0;
                }
            }
        });

        // Print list after sorting
        System.out.println(list);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

[10 June - name, 15 April - name, 23 July - name, 03 March - name]
[03 March - name, 15 April - name, 10 June - name, 23 July - name]
Run Code Online (Sandbox Code Playgroud)

(但是,更好的想法可能是将日期/名称对封装到一个单独的类中.这样就可以避免每次需要将字符串用于这些类型时解析字符串.)