【问题标题】:Sorting a 2D array with comparator in java for each column用java中的比较器对每列的二维数组进行排序
【发布时间】:2016-03-31 19:32:25
【问题描述】:

我使用带有自定义比较器的 Array.sort 方法为二维数组排序的工作表

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 异常,因为稍后被划分为二维数组的数组中有不同大小的行。

我只是遇到了这个问题,因为我不知道在这里使用什么样的循环结构

【问题讨论】:

  • 如果您提供一个最小的工作示例,会更容易提供帮助。例如,您对 String[] array 的定义不是有效的 Java。
  • 用有效的语法编辑它

标签: java arrays sorting multidimensional-array comparator


【解决方案1】:

试试这个

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

【讨论】:

    猜你喜欢
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2013-05-26
    • 2012-04-13
    相关资源
    最近更新 更多