2011-03-22 106 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