我有一个用Java填充字符串的二维数组。我希望能够相对于我选择排序的列对整个数组进行排序。
例如:
假设我有一个看起来像这样的数据数组。
|John | C | Doe |
|Sally | A | Miller |
|Chris | B | Sanders|
我指定我想根据它们的中间首字母按降序排序,并返回一个看起来像这样的数组。
|John | C | Doe |
|Chris | B | Sanders|
|Sally | A | Miller |
有没有办法指定一个能做到这一点的比较器?
答案 0 :(得分:1)
当然,只需将列索引作为比较器的参数传递。
class ColumnComparator<T extends Comparable<T>> implements Comparator<T[]> {
private final int column;
ColumnComparator(int column) { this.column = column; }
@Override public int compare(T[] a, T[] b) {
return a[column].compareTo(b[column]);
}
}
或更简单地说,如果它总是第1列和字符串数组:
class ColumnComparator implements Comparator<String[]> {
@Override public int compare(T[] a, T[] b) {
return a[1].compareTo(b[1]);
}
}
答案 1 :(得分:0)
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
String[][] array = {{"John", "C", "Doe"}, {"Sally", "A", "Miller"}, {"Chris", "B", "Sanders"}};
Arrays.sort(array, new IndexComparator(0));
for(int i = 0; i < array.length; i++) {
System.out.println(array[i][0]);
}
}
}
class IndexComparator implements Comparator {
private int index = 0;
public IndexComparator(int index) {
this.index = index;
}
@Override
public int compare(String[] o1, String[] o2) {
return o1[index].compareTo(o2[index]);
}
}