[英]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.