Classe de comparateur Java pour trier les tableaux


Disons que nous avons le tableau à 2 dimensions suivant:

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

Comment la classe Java Comparator doit-elle être déclarée pour trier les tableaux par leurs premiers éléments dans l'ordre décroissant en utilisant Arrays.sort(camels, comparator)? La fonction compare de référence est:

@Override public int compare(int[] a, int [] b)
{
    return b[0] - a[0];
}
Author: aioobe, 2011-03-22

2 answers

[...] Comment la classe Java Comparator doit-elle être déclarée pour trier les tableaux par leurs premiers éléments dans l'ordre décroissant [...]

Voici un exemple complet d'utilisation de 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));
    }
}

Sortie:

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

Pour Java 7, vous pouvez faire:

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

Si vous avez le malheur de travailler sur Java 6 ou plus, vous feriez:

Arrays.sort(twoDim, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        return ((Integer) o2[0]).compareTo(o1[0]);
    }
});
 51
Author: aioobe, 2014-10-08 16:18:21

La réponse de @aioobe est excellente. Je veux juste ajouter une autre façon pour Java 8.

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

Pour moi, c'est intuitif et facile à retenir avec la syntaxe Java 8.

 0
Author: user2830451, 2018-08-10 07:14:34