Java 8 example to sort stream of objects by multiple fields using comparators and Comparator.thenComparing[] method. This method returns a lexicographic-order comparator with another comparator. It gives the same effect as SQL group by clause.
1. Create comparators for multiple fields
To sort on multiple fields, we must first create comparator for each field on which we want to sort the stream. Then chain each comparator in desired order to give group by effect on complete sorting.
//first name comparator Comparator compareByFirstName = Comparator.comparing[ Employee::getFirstName ]; //last name comparator Comparator compareByLastName = Comparator.comparing[ Employee::getLastName ]; //Compare by first name and then last name [multiple fields] Comparator compareByFullName = compareByFirstName.thenComparing[compareByLastName]; //Using Comparator - pseudo code list.stream[].sorted[ comparator ].collect[];2. Java stream sort on multiple fields example
Example of using thenComparing[] to create Comparator which is capable of sorting by multiple fields.
Program Output.
[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]]Drop me your questions in comments section related to sorting on multiple fields in stream of objects in Java 8.
Happy Learning !!
Reference:
Comparator.thenComparing[] Java Doc
Was this post helpful?
Let us know if you liked the post. Thats the only way we can improve.
Yes
No