- 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]
