您需要一个自定义比较器。以自然顺序比较字符串(即使用String
implements的事实Comparable<String>
)将给出您看到的结果,因为0
低于1
,所以这是预期的。
这是一个示例类,它可以做你想做的事,但请注意,它假定所有日期的格式都正确(如果日期不正确,该parse()
方法会DateFormat
抛出未选中IllegalArgumentException
的内容):
public final class MyComparator
implements Comparator<String>
{
// Date parsing
// Note: SimpleDateFormat is not thread-safe, if possible use Joda Time instead
private static final DateFormat fmt = new SimpleDateFormat("dd/MM/YYYY");
private static final Comparator<String> INSTANCE = new MyComparator();
private MyComparator()
{
}
public static Comparator<String> getInstance()
{
return INSTANCE;
}
@Override
public int compare(String o1, String o2)
{
// Grab dates
String s1 = o1.subString(0, 10);
Date d1 = fmt.parse(s1);
String s2 = o2.subString(0, 10);
Date d2 = fmt.parse(s2);
// Date implements Comparable<Date>, so we can use that...
int ret = d1.compareTo(d2);
// If dates are equal, compare the rest of the strings instead.
return ret != 0 ? ret : o1.subString(10).compareTo(o2.subString(10));
}
}
然后你可以使用Collections.sort(theArray, MyComparator.getInstance());