I will demonstrate the use of this comparator in the scenario below.
Let us consider some entity called Allocation
There are many types of allocations.
ALevelAllocation
BLevelAllocation
etc
All of them have month.
if month is null -> Global allocation
if month is not null -> Monthly allocation
So let us introduce an interface
Usage :
Let us consider some entity called Allocation
There are many types of allocations.
ALevelAllocation
BLevelAllocation
etc
All of them have month.
if month is null -> Global allocation
if month is not null -> Monthly allocation
So let us introduce an interface
public interface MonthLevelAllocationMarker { String getMonth(); } class ALevelAllocation implements MonthLevelAllocationMarker{ class BLevelAllocation implements MonthLevelAllocationMarker{This way when I need to write any custom comparator to sort the allocations, I need to write only one Comparator for type MonthLevelAllocationMarker
import org.apache.commons.collections.comparators.NullComparator; public class MonthFirstAllocationSorter implements Comparator<MonthLevelAllocationMarker>, Serializable { private static final long serialVersionUID = 1L; @Override public int compare(MonthLevelAllocationMarker a, MonthLevelAllocationMarker b) { boolean nullsAreHighForGlobalMonth = true; NullComparator nullComparator = new NullComparator(nullsAreHighForGlobalMonth); return nullComparator.compare(a.getMonth(), b.getMonth()); } }I am using NullComparator to sort the nulls are high. Meaning Monthly allocations first and global allocation last.
Usage :
List<ALevelAllocation> allocations; Collections.sort(allocations, new MonthFirstAllocationSorter());
No comments:
Post a Comment