- 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:
- Comparator to sort Vehicle objects by model
- Comparator to sort Vehicle objects by owner
- 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]] |