Sort nested list java

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.

import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main[String[] args] { ArrayList employees = getUnsortedEmployeeList[]; //Compare by first name and then last name Comparator compareByName = Comparator .comparing[Employee::getFirstName] .thenComparing[Employee::getLastName]; List sortedEmployees = employees.stream[] .sorted[compareByName] .collect[Collectors.toList[]]; System.out.println[sortedEmployees]; } private static ArrayList getUnsortedEmployeeList[] { ArrayList list = new ArrayList[]; list.add[ new Employee[2l, "Lokesh", "Gupta"] ]; list.add[ new Employee[1l, "Alex", "Gussin"] ]; list.add[ new Employee[4l, "Brian", "Sux"] ]; list.add[ new Employee[5l, "Neon", "Piper"] ]; list.add[ new Employee[3l, "David", "Beckham"] ]; list.add[ new Employee[7l, "Alex", "Beckham"] ]; list.add[ new Employee[6l, "Brian", "Suxena"] ]; return list; } }

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

Video liên quan

Chủ Đề