[英]Sorting a 2D array with comparator in java for each column
我工作表通过带有自定义比较器的Array.sort方法为2D数组排序
String[] array=new String[]{
"a b c",
"a",
"a b",
"a c"};
我希望输出也如下所示
{"a",
"a b",
"a b c",
"a c"}
比较器的比较方法如下
public int compare(String arg0, String arg1) {
String[] tempArray0 = arg0.split(" +");
String[] tempArray1 = arg1.split(" +");
if (!arg0.isEmpty() && !arg1.isEmpty())
{
return sortStrings(tempArray0[0], tempArray1[0]);
}
sortStrings方法看起来像这样
private int sortStrings(String arg0, String arg1) {
if (arg0.toLowerCase().compareTo(arg1) > 0) {
return 1;
} else if (arg0.toLowerCase().compareTo(arg1) < 0) {
return -1;
} else {
return 0;
}
}
如果只想按第一列,此问题就很好,但是对我来说,有必要检查一下,如果该列具有相同的值,则应对下一列进行排序,依此类推。
我知道在这种情况下,我将需要捕获一个IndexOutOfBounds异常,因为数组的稍后被分为2D数组的行具有不同大小的行。
我只是遇到了这个问题,因为我不知道在这里使用哪种循环结构
尝试这个
String[][] array = new String[][] { { "a", "b", "c" }, { "a" }, { "a", "b" }, { "a", "c" } };
Arrays.sort(array, new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
for (int i = 0; i < o1.length; i++) {
if (o2.length == i) return 1;
int comp = o1[i].compareTo(o2[i]);
if (comp != 0)
return comp;
}
return -1;
}
});
应该打印:
a
ab
abc
ac
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.