у меня есть этот объект ClientSearchJava сортировка с несколькими условиями колонок
public class ClientSearch{
private Long clientNumber;
private String queueNumber;
private String clientName;
private String customerName;
.....
}
мне нужно разобраться в этом по этому правилу:
показать clientNumber убыванию первую затем CUSTOMERNAME нисходящим и после того, как все записи с clientNumber являются отображать, сортировать по очереди в порядке убывания и имя_пользователя в порядке убывания. не
Это должно быть результатом --- ClientNumber убывание затем, CustomerName по убыванию, а затем, по убыванию QueueNumber затем, CustomerName по убыванию
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
В основном каждый объект имеет ClientSearch либо clientNumber или queueNumber (если нет клиентский номер, то номер квина считается номером клиента, поэтому он отображается под этим столбцом),
Я думал, что после того, List <>), я буду перебирать список с условием.
if clientNumber is present then add to a List<ClientSearch> withClientNumbers
else if queueNumber is present then add to a List<ClientSearch> withQueueNumbers
После этого, я буду сортировать withClientNumbers с компаратором, который сравнивает clientNumber в ClientSearch в то, если они равны нулю плохо делать другое сравнение с CUSTOMERNAME ClientSearch в. Мне просто нужно умножить их на -1, чтобы убедиться, что это DESC.
Я сделаю то же самое с queueNumbers, но с другим компаратором.
затем Ill создать новый список NewList и затем сделать это
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.
Можете ли вы предложить какой-либо другой элегантный способ сделать это? Я чувствую, что мой метод не самый оптимизированный. Обратите внимание, что я использую Java 1.6
в таблице вы показали «CLIENTNAME», но в описании текстологии, вы использовали «CUSTOMERNAME» в обоих случаях. Можете ли вы это прояснить? И в чем проблема, заключающаяся в сравнении компаратора с номером ClientNumber (null last), а затем с номером очереди, а затем с именем клиента? –
Примечание для тех, кто читает это, что может использовать Java 8: Существует очень элегантный способ привязки условий сравнения: 'people.sort (Comparator.comparing (Human :: getName). ThenComparing (Human :: getAge));' См. Http : //www.baeldung.com/java-8-sort-lambda для полного объяснения – Thirler