Пример сортировки списка объектов по нескольким полям с использованием метода Comparator.thenComparing() на Java. Этот метод возвращает лексикографический компаратор с другим указанным компаратором. Этот метод дает тот же эффект, что и предложение SQL ORDER BY.
// компаратор имениComparator compareByFirstName = Comparator.comparing(Сотрудник::getFirstName);//компаратор фамилийComparator compareByLastName = Comparator.comparing(Сотрудник::getLastName);//Сравнить по имени, а затем по фамилии(несколько полей)Компаратор<Сотрудник> compareByFullName = compareByFirstName.thenComparing(compareByLastName);//Использовать компараторКоллекции.сортировать(сотрудники, сравнитьПоПолномуИмени);
Сортировка по нескольким полям – ORDER BY Сортировка
Пример использования thenComparing() для создания компаратора, способного сортировать по нескольким полям.
частный статический ArrayList<Сотрудник> getUnsortedEmployeeList(){ArrayList список = новый ArrayList<>();список.добавить(новый сотрудник(2, "Локеш", "Гупта"));список.добавить(новый сотрудник(1, "Алекс", "Гуссин"));список.добавить(новый сотрудник(4, "Брайан", "Сакс"));список.добавить(новый сотрудник(5, "Неон", "Пайпер"));список.добавить(новый сотрудник(3, "Дэвид", "Бекхэм"));список.добавить(новый сотрудник(7, "Алекс", "Бекхэм"));список.добавить(новый сотрудник(6, "Брайан", "Суксена"));список возврата;}ArrayList employees = getUnsortedEmployeeList();//Сравнить по имени, а затем по фамилииComparator<Сотрудник> compareByName = Comparator.сравнение(Сотрудник::получитьИмя).thenComparing(Сотрудник::getLastName);Коллекции.сортировка(сотрудники, сравнениеПоИмени);
Посмотрите на вывод программы, в которой сотрудники отсортированы сначала по имени, а затем по фамилии в порядке следования по словарю.
[E[id=7, firstName=Alex, lastName=Beckham],E [id=1, firstName=Alex, lastName=Gussin],E [id=4, firstName=Brian, lastName=Sux],E [id=6, firstName=Brian, lastName=Suxena],E [id=3, firstName=David, lastName=Beckham],E [id=2, firstName=Lokesh, lastName=Gupta],E [id=5, firstName=Neon, lastName=Piper]]
Пишите мне свои вопросы в комментариях.