2011-03-22 21 views
24

decir, que tiene la siguiente matriz de 2 dimensiones:clase Java comparador para ordenar matrices

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

¿Cómo debe ser declarada de Java Comparator clase para ordenar las matrices de sus primeros elementos en orden decreciente usando Arrays.sort(camels, comparator)? La función compare de referencia es:

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

Respuesta

47

[...] ¿Cómo debe ser declarada clase Java comparador para ordenar las matrices de sus primeros elementos con el fin la disminución [...]

Aquí está un ejemplo completo utilizando 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.comparing((int[] arr) -> arr[0]) 
             .reversed()); 

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

Salida:

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

Para Java 7 que puede hacer:

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

Si la mala suerte de trabajar en Java 6 o más, harías:

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

Perdón por abrir un hilo antiguo, pero ¿por qué era necesario convertirlo a Entero cuando devuelve el método de comparación? –

+0

@EvolutionaryHigh, porque no puede llamar a '.compareTo' en un' int'. – aioobe

+0

También la anotación @Override no funcionará en java 5. http://stackoverflow.com/questions/987973/why-does-eclipse-complain-about-override-on-interface-methods – jontro

Cuestiones relacionadas