使用基于所选列的Arrays.sort对二维String数组进行排序

时间:2015-11-25 14:04:04

标签: java arrays sorting

我有一个用Java填充字符串的二维数组。我希望能够相对于我选择排序的列对整个数组进行排序。

例如:

假设我有一个看起来像这样的数据数组。

|John  | C | Doe    |

|Sally | A | Miller |

|Chris | B | Sanders|

我指定我想根据它们的中间首字母按降序排序,并返回一个看起来像这样的数组。

|John  | C | Doe    |

|Chris | B | Sanders|

|Sally | A | Miller |

有没有办法指定一个能做到这一点的比较器?

2 个答案:

答案 0 :(得分:1)

当然,只需将列索引作为比较器的参数传递。

class ColumnComparator<T extends Comparable<T>> implements Comparator<T[]> {
  private final int column;

  ColumnComparator(int column) { this.column = column; }

  @Override public int compare(T[] a, T[] b) {
    return a[column].compareTo(b[column]);
  }
}

或更简单地说,如果它总是第1列和字符串数组:

class ColumnComparator implements Comparator<String[]> {
  @Override public int compare(T[] a, T[] b) {
    return a[1].compareTo(b[1]);
  }
}

答案 1 :(得分:0)


import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        String[][] array = {{"John", "C", "Doe"}, {"Sally", "A", "Miller"}, {"Chris", "B", "Sanders"}};
        Arrays.sort(array, new IndexComparator(0));
        for(int i = 0; i < array.length; i++) {
            System.out.println(array[i][0]);
        }
    }
}

class IndexComparator implements Comparator {
    private int index = 0;

    public IndexComparator(int index) {
        this.index = index;
    }


    @Override
    public int compare(String[] o1, String[] o2) {
        return o1[index].compareTo(o2[index]);
    }
}