Metoda thenComparing pozwala w łatwy sposób odwzorować sortowanie w silnikach baz danych (na przykład order by name, surname) – czyli sytuację gdzie najpierw chcemy posortować po polu A a następnie (posortowane elementy po polu A) po polu B.
Przykład
Załóżmy, że mamy następującą klasę:
class Person{
private final String name;
private final String surname;
//constructor, getters, toString...
}
I chcemy posortować obiekty tej klasy na początku po nazwisku, a później po imionach:
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person("Andrew", "Berry"));
people.add(new Person("Patrick", "Berry"));
people.add(new Person("Donna", "Ant"));
people.add(new Person("Carmen", "Ant"));
Comparator<Person> personComparator =
Comparator.comparing(Person::getSurname)
.thenComparing(Person::getName);
printPeople("Before sorting:", people);
people.sort(personComparator);
printPeople("After sorting:", people);
}
Po posortowaniu powinniśmy otrzymać:
Before sorting:
Person{name='Andrew', surname='Berry'}
Person{name='Patrick', surname='Berry'}
Person{name='Donna', surname='Ant'}
Person{name='Carmen', surname='Ant'}
After sorting:
Person{name='Carmen', surname='Ant'}
Person{name='Donna', surname='Ant'}
Person{name='Andrew', surname='Berry'}
Person{name='Patrick', surname='Berry'}