j'ai cet objet ClientSearchJava tri avec plusieurs conditions de colonne
public class ClientSearch{
private Long clientNumber;
private String queueNumber;
private String clientName;
private String customerName;
.....
}
je dois régler ce problème par cette règle:
Afficher le ClientNumber descendant d'abord, puis par customerName descendant et après tous les enregistrements ClientNumber sont affiché, trier par queueNumber dans l'ordre décroissant et customerName dans l'ordre décroissant.
Cela devrait être le résultat --- ClientNumber desc puis, CustomerName desc, puis, QueueNumber desc puis, CustomerName desc
ClientNumber ClientName CustomerName
987654 Client1 Xyz1
987654 Client2 Abc2
555555 Client3 zzzzz1
21212 XYZ1 aaaab
111111 Client10 cZ
111111 Client11 cY
Z1Z1Z1 ClientX zzzzz
Z1Z1Z1 ClientY yyyyy
X2X2X2 Clienxyz aaaaaa
HHHHHH ClientH bbbbbb
AAAAAA ClientA xxxxxx
Fondamentalement, chaque objet a ClientSearch soit un ClientNumber ou un queueNumber (s'il n'y a pas numéro de client puis le numéro de queu est considéré comme un numéro de client c'est pourquoi il est affiché sous cette colonne),
ce que je pensais faire est, après avoir reçu une liste de ma requête (que je n'ai aucun contrôle, je viens de recevoir le Liste <>), je vais parcourir la liste avec la condition.
if clientNumber is present then add to a List<ClientSearch> withClientNumbers
else if queueNumber is present then add to a List<ClientSearch> withQueueNumbers
Après avoir fait cela, je vais trier les withClientNumbers avec un comparateur qui compare la ClientNumber du ClientSearch alors si elles sont égales à zéro mal faire autre comparer avec customerName de ClientSearch. J'ai juste besoin de les multiplier par -1 pour m'assurer que c'est DESC. Je ferai la même chose avec queueNumbers mais avec un comparateur différent.
puis Ill créer une nouvelle liste newList et fera ce
newList.addAll(withClientNumbers); //make sure this is first in the list
newList.addAll(queueNumbers); // so to satisfy the condition that queueNumbers are shown after a sorted clientNumbers.
Pouvez-vous suggérer une autre façon élégante de le faire? Je sens que ma méthode n'est pas la plus optimisée. Prenez note que j'utilise Java 1.6
dans votre table vous a montré « clientName », mais dans votre description textuelle, vous avez utilisé « customerName » dans les deux cas. Pouvez-vous clarifier cela? Et, quel est le problème faisant un comparateur comparant ClientNumber (null last) puis numéro de file d'attente, puis nom du client? –
Note pour quiconque lisant ceci qui peut utiliser Java 8: Il y a une manière très élégante de chaîner les conditions de comparaison: 'humans.sort (Comparator.comparing (Human :: getName) .thenComparing (Human :: getAge));' Voir http : //www.baeldung.com/java-8-sort-lambda pour l'explication complète – Thirler