Sort objects on multiple fields /properties – Comparator interface (lambda stream java 8)

  • 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

  1. Create a Person Class
  2. Create a arraylist of Person objects.
  3. We will demonstrate following sorting operations:
    1. Sorted the list of person objects by firstName
    2. Cascade Sort arraylist of person objects by
      • firstName then
      • lastName then
      • age
    3. 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]

Scroll to Top