Java Comparator

Java Comparator interface is used to order the user-defined class objects, compare() method, collection.

Approach: Sort on a single field (Name)

Example 1:

Output: [[Employee [name=Aman, age=36], Employee [name=Jeetu, age=26], Employee [name=Jitu, age=36], Employee [name=Ram, age=23], Employee [name=Shyam, age=25]]]


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

public class JavaComparator {
    public static void main(String[] args) {
        List<Employeelist = new ArrayList<Employee>();
        list.add(new Employee("Ram"23));
        list.add(new Employee("Shyam"25));
        list.add(new Employee("Jeetu"26));
        list.add(new Employee("Aman"36));
        list.add(new Employee("Jitu"36));

        Collections.sort(list, new EmployeeNameComparator());
        System.out.println(Arrays.asList(list));

    }
}

class EmployeeNameComparator implements Comparator<Employee> {

    @Override
    public int compare(Employee o1Employee o2) {
        return o1.name.compareTo(o2.name);
    }

}

class Employee {
    String name;
    int age;

    public Employee(String nameint age) {
        super();
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Employee [name=" + name + ", age=" + age + "]";
    }

}


Approach: Sort on a single field (Age)

Example 1:
Output: [[Employee [name=Jitu, age=14], Employee [name=Ram, age=23], Employee [name=Shyam, age=25], Employee [name=Jeetu, age=26], Employee [name=Aman, age=36]]]



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

public class JavaComparator {
    public static void main(String[] args) {
        List<Employeelist = new ArrayList<Employee>();
        list.add(new Employee("Ram"23));
        list.add(new Employee("Shyam"25));
        list.add(new Employee("Jeetu"26));
        list.add(new Employee("Aman"36));
        list.add(new Employee("Jitu"14));

        Collections.sort(list, new EmployeeAgeComparator());
        System.out.println(Arrays.asList(list));

    }
}

class EmployeeAgeComparator implements Comparator<Employee> {

    @Override
    public int compare(Employee o1Employee o2) {
        return o1.age - o2.age;
    }

}

class Employee {
    String name;
    int age;

    public Employee(String nameint age) {
        super();
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Employee [name=" + name + ", age=" + age + "]";
    }

}


Approach: Sort on both fields (Name and Age)

Example 1:

Output: [[Employee [name=Aamn, age=14], Employee [name=Aman, age=36], Employee [name=Jeetu, age=26], Employee [name=Ram, age=25], Employee [name=Ram Singh, age=23]]]



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

public class JavaComparator {
    public static void main(String[] args) {
        List<Employeelist = new ArrayList<Employee>();
        list.add(new Employee("Ram Singh"23));
        list.add(new Employee("Ram"25));
        list.add(new Employee("Jeetu"26));
        list.add(new Employee("Aman"36));
        list.add(new Employee("Aamn"14));
        Collections.sort(list, new EmployeeAgeNameComparator());
        System.out.println(Arrays.asList(list));

    }
}

class EmployeeAgeNameComparator implements Comparator<Employee> {
    @Override
    public int compare(Employee o1Employee o2) {
        int name=o1.name.compareTo(o2.name);
        if (name!= 0)
            return name;
        else
            return  o1.age - o2.age;
    }
}

class Employee {
    String name;
    int age;

    public Employee(String nameint age) {
        super();
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Employee [name=" + name + ", age=" + age + "]";
    }

}


Approach: Sort on both fields (Name and Age) using chain comparator.

Example 1:

Output: [[Employee [name=Aamn, age=14], Employee [name=Aman, age=36], Employee [name=Jeetu, age=26], Employee [name=Ram, age=25], Employee [name=Ram Singh, age=23]]]


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

public class JavaComparator {
    public static void main(String[] args) {
        List<Employeelist = new ArrayList<Employee>();
        list.add(new Employee("Ram Singh"23));
        list.add(new Employee("Ram"25));
        list.add(new Employee("Jeetu"26));
        list.add(new Employee("Aman"36));
        list.add(new Employee("Aamn"14));
        // using chain comparator
        Collections.sort(list, new EmployeeNameComparator().
                    thenComparing(new EmployeeAgeComparator()));
        System.out.println(Arrays.asList(list));

    }
}

class EmployeeAgeComparator implements Comparator<Employee> {

    @Override
    public int compare(Employee o1Employee o2) {
        return o1.age - o2.age;
    }

}

class EmployeeNameComparator implements Comparator<Employee> {

    @Override
    public int compare(Employee o1Employee o2) {
        return o1.name.compareTo(o2.name);
    }

}

class Employee {
    String name;
    int age;

    public Employee(String nameint age) {
        super();
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Employee [name=" + name + ", age=" + age + "]";
    }

}



No comments:

Post a Comment