class ArrayComparator implements Comparator<Comparable[]> {
private final int columnToSort;
private final boolean ascending;
public ArrayComparator(int columnToSort, boolean ascending) {
this.columnToSort = columnToSort;
this.ascending = ascending;
}
public int compare(Comparable[] c1, Comparable[] c2) {
int cmp = c1[columnToSort].compareTo(c2[columnToSort]);
return ascending ? cmp : -cmp;
}
}
這樣你就可以處理這些數組中的任何類型的數據(只要它們是Comparable),並且你可以對asc中的任何列進行排序結束或降序。
String[][] data = getData();
Arrays.sort(data, new ArrayComparator(0, true));
PS:確保您檢查了ArrayIndexOutOfBounds
等。
編輯:如果你能實際上是java.util.Date
存儲在第一列或者如果你的日期格式允許你使用普通的字符串比較這些值上述解決方案只能是有益的。否則,您需要將該String轉換爲日期,並且可以使用回調接口(作爲常規解決方案)來實現。下面是一個加強版:
class ArrayComparator implements Comparator<Object[]> {
private static Converter DEFAULT_CONVERTER = new Converter() {
@Override
public Comparable convert(Object o) {
// simply assume the object is Comparable
return (Comparable) o;
}
};
private final int columnToSort;
private final boolean ascending;
private final Converter converter;
public ArrayComparator(int columnToSort, boolean ascending) {
this(columnToSort, ascending, DEFAULT_CONVERTER);
}
public ArrayComparator(int columnToSort, boolean ascending, Converter converter) {
this.columnToSort = columnToSort;
this.ascending = ascending;
this.converter = converter;
}
public int compare(Object[] o1, Object[] o2) {
Comparable c1 = converter.convert(o1[columnToSort]);
Comparable c2 = converter.convert(o2[columnToSort]);
int cmp = c1.compareTo(c2);
return ascending ? cmp : -cmp;
}
}
interface Converter {
Comparable convert(Object o);
}
class DateConverter implements Converter {
private static final DateFormat df = new SimpleDateFormat("yyyy.MM.dd hh:mm");
@Override
public Comparable convert(Object o) {
try {
return df.parse(o.toString());
} catch (ParseException e) {
throw new IllegalArgumentException(e);
}
}
}
而在這一點上,你可以排序對你和第一柱:
Arrays.sort(data, new ArrayComparator(0, true, new DateConverter());
我跳過空值和其他錯誤處理問題的檢查。
我同意這開始看起來像一個框架已經。 :)
最後(希望)編輯:我現在只知道你的日期格式允許你使用普通的字符串比較。如果是這種情況,則不需要「增強版」。
-1這韓元不會編譯。應該排序(數組,比較器)。 – dogbane 2011-02-05 15:44:43
根據@ dogbane的修正編輯。 – 2011-02-05 16:18:23