用于对数组进行排序的Java Comparator类

时间:2011-03-22 15:02:47

标签: java arrays multidimensional-array comparator

说,我们有以下二维数组:

int camels[][] = new int[n][2];

如何声明Java Comparator类,使用Arrays.sort(camels, comparator)按降序排列第一个元素的数组? compare函数供参考:

@Override public int compare(int[] a, int [] b)
{
    return b[0] - a[0];
}

3 个答案:

答案 0 :(得分:60)

  

[...]如何声明Java Comparator类以按其递减顺序第一个元素对数组进行排序 [...]

以下是使用 Java 8

的完整示例
import java.util.*;

public class Test {

    public static void main(String args[]) {

        int[][] twoDim = { {1, 2}, {3, 7}, {8, 9}, {4, 2}, {5, 3} };

        Arrays.sort(twoDim, Comparator.comparingInt(a -> a[0])
                                      .reversed());

        System.out.println(Arrays.deepToString(twoDim));
    }
}

<强>输出:

[[8, 9], [5, 3], [4, 2], [3, 7], [1, 2]]

对于 Java 7 ,您可以这样做:

Arrays.sort(twoDim, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        return Integer.compare(o2[0], o1[0]);
    }
});

如果您不幸在 Java 6 或更早版本上工作,您可以这样做:

Arrays.sort(twoDim, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        return ((Integer) o2[0]).compareTo(o1[0]);
    }
});

答案 1 :(得分:2)

只需尝试此解决方案,我们甚至不必编写int。

int[][] twoDim = { { 1, 2 }, { 3, 7 }, { 8, 9 }, { 4, 2 }, { 5, 3 } };
Arrays.sort(twoDim, (a1,a2) -> a2[0] - a1[0]);

这东西也可以工作,它会自动检测字符串的类型。

答案 2 :(得分:1)

@aioobe的回答非常好。我只想为Java 8添加另一种方式。

int[][] twoDim = { { 1, 2 }, { 3, 7 }, { 8, 9 }, { 4, 2 }, { 5, 3 } };

Arrays.sort(twoDim, (int[] o1, int[] o2) -> o2[0] - o1[0]);

System.out.println(Arrays.deepToString(twoDim));

对我来说,使用Java 8语法直观易记。