Sunday 3 June 2018

TreeSet Example Using Comparator

TreeSet Example


In the below example, we can see that how to use Comparator to use custom sorting. Suppose we have a third party class which is not implementing Comparable interface and we needs to add that custom class in TreeSet. At that situation, we can use the below technique to implement the custom sorting using Comparator interface and TreeSet constructor which accepts Comparator object.

package com.gaurav.mapexample;

import java.util.Comparator;
import java.util.TreeSet;

class Employee {
private String name;
private double salary;

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;
}

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

public Employee(String name, double salary) {
super();
this.name = name;
this.salary = salary;
}

}
class EmployeeNameComparator implements Comparator<Employee>{
public int compare(Employee emp1, Employee emp2){
return emp1.getName().compareTo(emp2.getName());
}
}

class EmployeeSalaryComparator implements Comparator<Employee>{
public int compare(Employee emp1, Employee emp2){
if(emp1.getSalary() > emp2.getSalary())
return 1;
else if(emp1.getSalary() < emp2.getSalary())
return -1;
else
return 0;
}
}

public class TreeSetExampleWithComparator {
public static void main(String args[]){
TreeSet<Employee> employeeNameComp = new TreeSet<Employee>(new EmployeeNameComparator());
employeeNameComp.add(new Employee("Gaurav", 115678.92));
employeeNameComp.add(new Employee("Shivam", 165678.92));
employeeNameComp.add(new Employee("Suresh", 195678.92));
employeeNameComp.add(new Employee("Sunita", 85678.92));
employeeNameComp.add(new Employee("Aaditya", 55678.92));

//Uses of Stream & for each methods of collection which is introduced in java 8.
employeeNameComp.stream().forEach(i->System.out.println(i));

System.out.println("###################################");
TreeSet<Employee> employeeSalaryComp = new TreeSet<Employee>(new EmployeeSalaryComparator());
employeeSalaryComp.add(new Employee("Gaurav", 115678.92));
employeeSalaryComp.add(new Employee("Shivam", 165678.92));
employeeSalaryComp.add(new Employee("Suresh", 195678.92));
employeeSalaryComp.add(new Employee("Sunita", 85678.92));
employeeSalaryComp.add(new Employee("Aaditya", 55678.92));

//Uses of Stream & for each methods of collection which is introduced in java 8.
employeeSalaryComp.stream().forEach(i->System.out.println(i));

}
}

Output:

Employee [name=Aaditya, salary=55678.92]
Employee [name=Gaurav, salary=115678.92]
Employee [name=Shivam, salary=165678.92]
Employee [name=Sunita, salary=85678.92]
Employee [name=Suresh, salary=195678.92]
###################################
Employee [name=Aaditya, salary=55678.92]
Employee [name=Sunita, salary=85678.92]
Employee [name=Gaurav, salary=115678.92]
Employee [name=Shivam, salary=165678.92]
Employee [name=Suresh, salary=195678.92]

No comments:

Post a Comment