- Given a list of user defined objects, we would like sort the objects on multiple field or properties.
- We will use java 8 lambda stream to sort objects.
- We will create POJO of Person object. We will sort the list of person objects by their firstName.
- We will demonstrate the cascade sorting.
- We will sort the list of objects on multiple fields.
1. Sort Objects on multiple properties – Comparator interface (lambda java8)
We will perform following operations on user defined objects or POJO
- Create a Person Class
- Create a arraylist of Person objects.
- We will demonstrate following sorting operations:
- Sorted the list of person objects by firstName
- Cascade Sort arraylist of person objects by
- firstName then
- lastName then
- age
- We will write three Comparators to demonstrate cascade sorting
- Comparator to sort objects by first name.
- Comparator to sort objects by last name.
- Comparator to sort objects by age.
2. Sort user defined object on multiple fields – Comparator (lambda stream)
package org.learn; import java.util.ArrayList; import java.util.Comparator; import java.util.List; public class SortObjectByField { public static void main(String[] args) { List <Person> personList = new ArrayList<>(); personList.add( new Person( "Mike" , "harvey" , 34 , "001894536" )); personList.add( new Person( "Nick" , "young" , 75 , "005425676" )); personList.add( new Person( "Jack" , "slater" , 21 , "009654153" )); personList.add( new Person( "gary" , "hudson" , 55 , "00564536" )); personList.add( new Person( "Mike" , "harvey" , 21 , "003685417" )); personList.add( new Person( "gary" , "hudson" , 25 , "00452341" )); System.out.println( "1. Sort List of person objects by firstName" ); //Sort by First Name personList .stream() .sorted( (person1,person2) -> person1.firstName. compareToIgnoreCase(person2.firstName) ) .forEach( person-> System.out.println(person) ); //Sort by first and last name System.out.println( "\n2.Sort list of person objects by firstName then " + "by lastName then by age" ); Comparator<Person> sortByFirstName = (p, o) -> p.firstName.compareToIgnoreCase(o.firstName); Comparator<Person> sortByLastName = (p, o) -> p.lastName.compareToIgnoreCase(o.lastName); Comparator<Person> sortByAge = (p, o) -> Integer.compare(p.age,o.age); //Sort by first Name then Sort by last name then sort by age personList .stream() .sorted( sortByFirstName .thenComparing(sortByLastName) .thenComparing(sortByAge) ) .forEach( person-> System.out.println(person) ); } } |
3. O/P: Sort objects on multiple fields – Comparator interface (lambda stream)
1 . Sort List of person objects by firstName [gary hudson 55 00564536 ] [gary hudson 25 00452341 ] [Jack slater 21 009654153 ] [Mike harvey 34 001894536 ] [Mike harvey 21 003685417 ] [Nick young 75 005425676 ] 2 .Sort list of person objects by firstName then by lastName then by age [gary hudson 25 00452341 ] [gary hudson 55 00564536 ] [Jack slater 21 009654153 ] [Mike harvey 21 003685417 ] [Mike harvey 34 001894536 ] [Nick young 75 005425676 ] |