Je veux trier seq1 en ordre croissant et seq2 en ordre décroissant, alors je fais ceci:
list = list.stream().sorted(comparing(AClass::getSeq1).thenComparing(
AClass::getSeq2).reversed()).collect(toList());
Mais le résultat sort car seq1 et seq2 sont triés par ordre décroissant.
Je peux le faire pour faire seq1 ascendant et seq2 descendant:
sorted(comparing(AClass::getSeq1)
.reversed().thenComparing(AClass::getSeq2).reversed()
Quelle est vraiment la bonne façon de procéder?
Dans votre premier exemple, reversed
est appliqué à tout le comparateur qui compare seq1 puis seq2 dans l'ordre croissant.
Ce dont vous avez besoin, c'est d'inverser la deuxième comparaison uniquement, ce qui peut être fait, par exemple, avec:
import static Java.util.Collections.reverseOrder;
import static Java.util.Comparator.comparing;
list = list.stream().sorted(
comparing(AClass::getSeq1)
.thenComparing(reverseOrder(comparing(AClass::getSeq2))))
.collect(toList());
//or you could also write:
list = list.stream().sorted(
comparing(AClass::getSeq1)
.thenComparing(comparing(AClass::getSeq2).reversed()))
.collect(toList());