Sort user defined objects/POJO in array (java/example/Comparator interface)

  • Given an array of user defined objects/POJO in java.
  • We would like to sort user defined objects on certain properties/data members.
  • We will use Arrays.sort method to sort objects.

1. Example – Sort POJO or user defined object using comparator interface.

Given a Array containing Vehicle objects. Vehicle class has following data members.

  • public String model
  • public String owner
  • public String registerCity
  • public LocalDate serviceDate

We would like to Sort Vehicle objects by model, owner and serviceDate. We will have a specialized Comparators to sort objects by model, owner & serviceDate. We will have following Comparators:

  1. Comparator to sort Vehicle objects by model
  2. Comparator to sort Vehicle objects by owner
  3. Comparator to sort Vehicle objects by serviceDate

2. Program – sort array of user defined objects/POJO (Java/Example)

package org.learn.collection.array;

import java.time.LocalDate;
import java.time.Month;
import java.util.Arrays;
import java.util.Comparator;

class Vehicle {
    public String model;
    public String owner;
    public String registerCity;
    public LocalDate serviceDate;

    public Vehicle(String model, String owner, String registerCity, LocalDate serviceDate) {
        this.model = model;
        this.serviceDate = serviceDate;
        this.owner = owner;
        this.registerCity = registerCity;
    }

    public String toString() {
        return String.format("\n[Model = %s,Owner = %s,registeredCity = %s,ServiceDate = %s]",
                model, owner, registerCity, serviceDate.toString());
    }
}

class SortByModel implements Comparator<Vehicle> {

    @Override
    public int compare(Vehicle vehicle1, Vehicle vehicle2) {
        return vehicle1.model.compareTo(vehicle2.model);
    }
}

class SortByOwner implements Comparator<Vehicle> {
    @Override
    public int compare(Vehicle vehicle1, Vehicle vehicle2) {
        return vehicle1.owner.compareTo(vehicle2.owner);
    }
}

class SortByServiceDate implements Comparator<Vehicle> {

    @Override
    public int compare(Vehicle vehicle1, Vehicle vehicle2) {
        return vehicle1.serviceDate.compareTo(vehicle2.serviceDate);
    }
}

public class ArraySortObject {

    public static void main(String[] args) {

        Vehicle[] arVehicle = {
                new Vehicle("S-Class", "Guzan", "NewYork", LocalDate.of(2014, Month.AUGUST, 01)),
                new Vehicle("C-Class", "Bedoya", "California", LocalDate.of(2009, Month.DECEMBER, 05)),
                new Vehicle("A-Class", "Cameron", "Illinois", LocalDate.of(2014, Month.JULY, 25)),
                new Vehicle("SL-Class", "Johnson", "Kansas", LocalDate.of(2011, Month.DECEMBER, 10))
        };

        //Print Unsorted array in java
        System.out.println("1. Unsorted Array of vehicle objects:");
        System.out.println(Arrays.toString(arVehicle));

        //Sort Vehicle objects by model
        Arrays.sort(arVehicle,new SortByModel());
        System.out.println("2. Sorted Vehicles by Model number:");
        System.out.println(Arrays.toString(arVehicle));

        //Sort Vehicle objects by Owner
        Arrays.sort(arVehicle,new SortByOwner());
        System.out.println("3. Sort Vehicles by Owner :");
        System.out.println(Arrays.toString(arVehicle));

        //Sort Vehicle objects by ServiceDate
        Arrays.sort(arVehicle,new SortByServiceDate());
        System.out.println("4. Sorted Vehicle by Service date:");
        System.out.println(Arrays.toString(arVehicle));
    }
}

3. Output – sort array of user defined objects/POJO (Java/Example)

1. Unsorted Array of vehicle objects:
[
[Model = S-Class,Owner = Guzan,registeredCity = NewYork,ServiceDate = 2014-08-01], 
[Model = C-Class,Owner = Bedoya,registeredCity = California,ServiceDate = 2009-12-05], 
[Model = A-Class,Owner = Cameron,registeredCity = Illinois,ServiceDate = 2014-07-25], 
[Model = SL-Class,Owner = Johnson,registeredCity = Kansas,ServiceDate = 2011-12-10]]
2. Sorted Vehicles by Model number:
[
[Model = A-Class,Owner = Cameron,registeredCity = Illinois,ServiceDate = 2014-07-25], 
[Model = C-Class,Owner = Bedoya,registeredCity = California,ServiceDate = 2009-12-05], 
[Model = S-Class,Owner = Guzan,registeredCity = NewYork,ServiceDate = 2014-08-01], 
[Model = SL-Class,Owner = Johnson,registeredCity = Kansas,ServiceDate = 2011-12-10]]
3. Sort Vehicles by Owner :
[
[Model = C-Class,Owner = Bedoya,registeredCity = California,ServiceDate = 2009-12-05], 
[Model = A-Class,Owner = Cameron,registeredCity = Illinois,ServiceDate = 2014-07-25], 
[Model = S-Class,Owner = Guzan,registeredCity = NewYork,ServiceDate = 2014-08-01], 
[Model = SL-Class,Owner = Johnson,registeredCity = Kansas,ServiceDate = 2011-12-10]]
4. Sorted Vehicle by Service date:
[
[Model = C-Class,Owner = Bedoya,registeredCity = California,ServiceDate = 2009-12-05], 
[Model = SL-Class,Owner = Johnson,registeredCity = Kansas,ServiceDate = 2011-12-10], 
[Model = A-Class,Owner = Cameron,registeredCity = Illinois,ServiceDate = 2014-07-25], 
[Model = S-Class,Owner = Guzan,registeredCity = NewYork,ServiceDate = 2014-08-01]]
Scroll to Top