簡體   English   中英

使用Java中的比較器對2D數組進行排序

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM