繁体   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