用于对数组进行排序的 Java 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];
}

原文由 Leonid 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 435
2 个回答

[…] 应该如何声明 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]);
    }
});

原文由 aioobe 发布,翻译遵循 CC BY-SA 4.0 许可协议

刚刚试过这个解决方案,我们甚至不必写 int。

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

这个东西也会起作用,它会自动检测字符串的类型。

原文由 user3706706 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题