2011-03-22 86 views
24

说排序,我们有以下的2维数组:Java的比较类阵列

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]; 
} 

回答

47

[...]应该如何的Java类比较被声明为降序通过第一元素的数组进行排序[...]

这是一个使用Java的一个完整的例子:

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.comparing((int[] arr) -> arr[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]); 
    } 
}); 
+0

抱歉提出一个旧的线程,但为什么需要在返回比较方法时转换为Integer? – 2013-08-21 02:52:13

+0

@EvolutionaryHigh,因为你不能在'int'上调用'.compareTo'。 – aioobe 2013-08-21 09:45:20

+0

另外@Override注释将不能在java 5中工作。http://gackoverflow.com/questions/987973/why-does-eclipse-complain-about-override-on-interface-methods – jontro 2014-10-08 16:25:58