Monday, 12 March 2018

Comparable interface in JAVA

Java.lang.Comparable is an interface in java to order/sorting the elements of a user defined class. This has below method

1. public int compareTo(Object o1) -- Compares this object with specified object  for order and returns negative or sero or positive value as this object is less than or equal or greater than the specified object

package com.sample.java.testing;

public class EmployeeComparableClass implements Comparable<EmployeeComparableClass>{
   
    private int id;
    private String name;
    private double salary;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
   
    public String toString() {
        return "Id of employee is " + this.id + " name of emloyess "  + this.name + " salary is " + this.salary;
    }

    public EmployeeComparableClass(int id, String name, double salary) {
        this.id = id;
        this.name = name;
        this.salary = salary;
    }


    /*@Override
    public int compareTo(EmployeeComparableClass o) {
        return o.getName().compareTo(o.getName());// compare based on name
    }*/
   
    @Override
    public int compareTo(EmployeeComparableClass o) {
        return this.getId() - o.getId(); // compare based on id
    }

}

package com.sample.java.testing;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class SortPrimitiveTest {

    public static void main(String[] args) {

        int[] numbers = new int[] { 1, 6, 3, 8, 9 };
        System.out.println("without sort " + Arrays.toString(numbers));
        Arrays.sort(numbers);
        System.out.println("sort array " + Arrays.toString(numbers));

        String[] strings = new String[] { "java", "jdbc", "spring", "servlets",
                "jsp" };
        System.out.println("without sort string array "
                + Arrays.toString(strings));
        Arrays.sort(strings);
        System.out.println("sort string array " + Arrays.toString(strings));

        List<String> courses = new ArrayList<>();
        courses.add("spring");
        courses.add("java");
        courses.add("jsp");
        courses.add("servlets");
        System.out.println("list without sort..");
        for (String string : courses) {
            System.out.println(string);// no sorting
        }
       
        Collections.sort(courses);
       
        System.out.println("list sorted..");
        for (String string : courses) {
            System.out.println(string);// sorting
        }
        EmployeeComparableClass[] classes = new EmployeeComparableClass[4];
       
        EmployeeComparableClass employeeClass = new EmployeeComparableClass(60, "Java", 345678);
        EmployeeComparableClass employeeClass1 = new EmployeeComparableClass(50, "J2ee", 9876543);
        EmployeeComparableClass employeeClass2 = new EmployeeComparableClass(30, "Spring", 12345);
        EmployeeComparableClass employeeClass3 = new EmployeeComparableClass(40, "Jdbc", 654);
        classes[0] = employeeClass;
        classes[1] = employeeClass3;
        classes[2] = employeeClass2;
        classes[3] = employeeClass1;
        // below it will throw an runtime exception
        //Exception in thread "main" java.lang.ClassCastException: com.sample.java.testing.EmployeeClass cannot be cast to java.lang.Comparable
        //hence i EmployeeComparableClass implement Comparable interface
        //SO by using comparable we can sort the list based on
        System.out.println("sorting list as per comparable...");
        Arrays.sort(classes);
        for (EmployeeComparableClass course : classes) {
            System.out.println(course.toString());// sorting based on id
        }

    }

}


Output:

without sort [1, 6, 3, 8, 9]
sort array [1, 3, 6, 8, 9]
without sort string array [java, jdbc, spring, servlets, jsp]
sort string array [java, jdbc, jsp, servlets, spring]
list without sort..
spring
java
jsp
servlets
list sorted..
java
jsp
servlets
spring
sorting list as per comparable...
Id of employee is 30 name of emloyess Spring salary is 12345.0
Id of employee is 40 name of emloyess Jdbc salary is 654.0
Id of employee is 50 name of emloyess J2ee salary is 9876543.0
Id of employee is 60 name of emloyess Java salary is 345678.0

We can sort collection in single way based on one of the attribute using Comparable Interface

No comments:

Post a Comment