Java
String class implements the Comparable interface, you can sort them in their natural order, using the Collections sort() method.if you want to sort the user defined objects in another order than their
compare() implementation, then you need to use a Comparator implementation (java.util.Comparator)Usual Implementation in Java 7:
import java.util.*;
public class Main
{
public static void main(String[] args) {
List<Car> list = new ArrayList<>();
list.add(new Car("Volvo V40" , "XYZ 201845", 5));
list.add(new Car("Citroen C1", "ABC 164521", 4));
ist.add(new Car("Dodge Ram" , "KLM 845990", 2));
Collections.sort(list, new BrandCompare());
for(Car lst: list){
System.out.println(lst.brand);
}
}
}
class Car{
public String brand;
public String numberPlate;
public int noOfDoors;
public Car(String brand, String numberPlate, int noOfDoors) {
this.brand = brand;
this.numberPlate = numberPlate;
this.noOfDoors = noOfDoors;
}
}
class BrandCompare implements Comparator<Car>{
public int compare(Car car1, Car car2) {
return car1.brand.compareTo(car2.brand);
}
}
class PlateCompare implements Comparator<Car>{
public int compare(Car car1, Car car2) {
return car1.numberPlate.compareTo(car2.numberPlate);
}
}
Implementation in external class:
List<Car> list = new ArrayList<>();
list.add(new Car("Volvo V40" , "XYZ 201845", 5));
list.add(new Car("Citroen C1", "ABC 164521", 4));
list.add(new Car("Dodge Ram" , "KLM 845990", 2));
Comparator<Car> carBrandComparator = new Comparator<Car>() {
@Override
public int compare(Car car1, Car car2) {
return car1.brand.compareTo(car2.brand);
}
};
Collections.sort(list, carBrandComparator);
Implementation in external class using lambda experession:
List<Car> list = new ArrayList<>();
list.add(new Car("Volvo V40" , "XYZ 201845", 5));
list.add(new Car("Citroen C1", "ABC 164521", 4));
list.add(new Car("Dodge Ram" , "KLM 845990", 2));
Comparator<Car> carBrandComparatorLambda =
(car1, car2) -> car1.brand.compareTo(car2.brand);
Comparator<Car> carNumberPlatComparatorLambda =
(car1, car2) -> car1.numberPlate.compareTo(car2.numberPlate);
Comparator<Car> carNoOfDoorsComparatorLambda =
(car1, car2) -> car1.noOfDoors - car2.noOfDoors;
Collections.sort(list, carBrandComparatorLambda);
Collections.sort(list, carNumberPlatComparatorLambda);
Collections.sort(list, carNoOfDoorsComparatorLambda);
We can also make use of getter method in bean to specify comparator field:
class Car{
public String brand;
public String numberPlate;
public int noOfDoors;
public String getBrand(){
return this.brand;
}
}
List<Car> list = new ArrayList<>();
list.add(new Car("Volvo V40" , "XYZ 201845", 5));
list.add(new Car("Citroen C1", "ABC 164521", 4));
list.add(new Car("Dodge Ram" , "KLM 845990", 2));
Comparator<Car> brandCompare =Comparator.comparing(Car::getBrand);
Collections.sort(al,brandCompare);
No comments:
Post a Comment