Java supports sorting on collection in two ways - through Comparable and Comparator(both are functional interfaces with one single abstract method).
Comparable:
To sort collection based on Comparable:
- Elements of the collection must implement Comparable interface and implement it's method "int compareTo(Object o1)".
- Then sorting can be done using Collections.sort(List)
Cons:
- Can't support multiple types of sorting, as one compareTo method can have only one implementation.
- May not have access to the element class, in which case, subclassing the element and implementing compareTo would be the only option.
Code:
public class Dog implements Comparable<Dog>{
      String name;
      String breed;
      public Dog(String name,String breed){
            this.name = name;
            this.breed = breed;
      }
        @Override
	public int compareTo(Dog o) {
		return name.compareTo(o.name);
	}
}
...
List<Dog> dogList = new ArrayList<Dog>();
Collections.sort(dogList);
...
Comparator:
To sort collection based on Comparator:
- A class/anonymous class implements Comparator interface and implements it's method "int compare(Object o1, Object o2).
- Then sorting can be done by passing the object of the above implmented Comparator - using Collection.sort(List, Comparator).
Pros:
- Can support multiple sorting implementations.
- Don't need to have access to elements of the collection.
Code:
public class DogBreedComparator implements Comparator<Dog> {
		@Override
		public int compare(Dog o1, Dog o2) {
			return o1.breed.compareTo(o2.breed);
		}
}
..
Collections.sort(dogList, new DogBreedComparator());
..
Lambda expression:
Collections.sort(dogList, (o1,o2)->o1.breed.compareTo(o2.breed));
..
Both compareTo and compare methods return integer - 
1  : if passed in object is greater than current object
-1: if passed in object is lesser than current object
0: if both are equal
~
 
No comments:
Post a Comment