Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于排序数组的Java Comparator类_Java_Arrays_Multidimensional Array_Comparator - Fatal编程技术网

用于排序数组的Java Comparator类

用于排序数组的Java Comparator类,java,arrays,multidimensional-array,comparator,Java,Arrays,Multidimensional Array,Comparator,比如,我们有以下二维数组: int camels[][] = new int[n][2]; 如何声明JavaComparator类,以便使用arrays.sort(camels,Comparator)按数组的第一个元素降序对数组进行排序?供参考的比较功能是: @Override public int compare(int[] a, int [] b) { return b[0] - a[0]; } […]应该如何声明Java Comparator类,以便按数组的第一个元素降序排序[

比如,我们有以下二维数组:

int camels[][] = new int[n][2];
如何声明Java
Comparator
类,以便使用
arrays.sort(camels,Comparator)
按数组的第一个元素降序对数组进行排序?供参考的
比较功能是:

@Override public int compare(int[] a, int [] b)
{
    return b[0] - a[0];
}
[…]应该如何声明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]);
    }
});
Arrays.sort(twoDim,新的比较器(){
@凌驾
公共整数比较(整数[]o1,整数[]o2){
返回整数。比较(o2[0],o1[0]);
}
});

如果您不幸使用了Java6或更早版本,您应该:

Arrays.sort(twoDim, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        return ((Integer) o2[0]).compareTo(o1[0]);
    }
});
Arrays.sort(twoDim,新的比较器(){
@凌驾
公共整数比较(整数[]o1,整数[]o2){
返回((整数)o2[0])。与(o1[0])比较;
}
});

来自@aioobe的答案非常好。我只想为Java8添加另一种方式

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));

对我来说,使用Java8语法很直观,也很容易记住。

刚刚尝试了这个解决方案,我们甚至不需要编写int

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

这件事也会起作用,它会自动检测字符串的类型。

很抱歉,出现了一个旧线程,但是为什么在返回compare方法时需要强制转换为Integer?@EvolutionaryHigh,因为您不能在
int
上调用
。compareTo
。另外@Override注释在java 5中也不起作用。哦,天哪。从4到5,到6,到7,再到8:-)这样的小用例有点有趣。我认为Swift中的闭包可以引用它来制作自己的格式,例如,
sort(){$1>$2}
,都是关于匿名函数的。