6 votes

Java, pourquoi collections.sort() fonctionne toujours avec des arguments typés non-comparateurs ?

Je sais que dans la classe Collections de Java, il existe une méthode statique de tri :

sort(List<T> list, Comparator<? super T> c**)

Le deuxième argument de sort doit être un objet qui implémente la norme Comparateur et sa méthode de comparaison.

Mais quand j'apprends Référence de la méthode lambda Je vois cet exemple :

public class Test 
{
     public static void main(String[] args) 
    {
        new Test().sortWord();  
    }

    public void sortWord()
    {
        List<String> lst = new ArrayList<>();
        lst.add("hello");
        lst.add("world");
        lst.add("apple");
        lst.add("zipcode");

        Collections.sort(lst, this::compareWord);

        System.out.println(lst);
    }

    public int compareWord(String a, String b)
    {
       return a.compareTo(b);
    }

}

Il s'agit d'un exemple de référence de méthode pour une méthode d'instance. la méthode compareWord n'a rien à voir avec l'interface Comparator, je ne comprends pas pourquoi cela fonctionne ? quelqu'un peut-il l'expliquer ?

Je vous remercie de votre attention.

7voto

Eran Points 35360

int compareWord(String a, String b) a la même signature que le int compare(String o1, String o2) de la méthode Comparator<String> l'interface. Il peut donc être utilisé comme une implémentation de cette interface.

Il s'agit d'une façon plus courte d'écrire :

Collections.sort(lst, new Comparator<String> () {
                     public int compare (String o1, String o2) {
                         return compareWord(o1,o2);
                     }
                 });

Dans Java 8, toute interface fonctionnelle telle que Comparator (i

1voto

nagendra547 Points 1847

Y

J

Collections.sort(lst);

B

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X