web-dev-qa-db-fra.com

Inverser un comparateur en Java 8

J'ai une liste de tableaux et je veux le trier par ordre décroissant. J'utilise pour cela la méthode Java.util.stream.Stream.sorted(Comparator). Voici une description en fonction de l'API Java:

Renvoie un flux constitué des éléments de ce flux, trié selon la variable Comparator fournie.

cette méthode me renvoie une sorte d'ordre croissant. Quel paramètre devrais-je changer, juste pour avoir l'ordre décroissant? 

26
Guforu

Vous pouvez utiliser Comparator.reverseOrder() pour avoir un comparateur qui impose l’inverse de l’ordre naturel.

Si vous souhaitez inverser l'ordre d'un comparateur existant, vous pouvez utiliser Comparator.reversed() .

Exemple de code:

Stream.of(1, 4, 2, 5)
    .sorted(Comparator.reverseOrder()); 
    // stream is now [5, 4, 2, 1]

Stream.of("foo", "test", "a")
    .sorted(Comparator.comparingInt(String::length).reversed()); 
    // stream is now [test, foo, a], sorted by descending length
67
Tunaki

L'interface Java Comparator a une méthode reversed: https://docs.Oracle.com/javase/8/docs/api/Java/util/Comparator.html#reversed--

6
Dici

Vous pouvez également utiliser Comparator.comparing (Function, Comparator)
Il est pratique d’enchaîner les comparateurs si nécessaire, par exemple:

Comparator<SomeEntity> ENTITY_COMPARATOR = comparing(SomeEntity::getProperty1, reverseOrder())
        .thenComparingInt(SomeEntity::getProperty2)
        .thenComparing(SomeEntity::getProperty3, reverseOrder());
1
dim42