I read about sorting ArrayLists using a Comparator but in all of the examples people used compareTo
which according to some research is a method for Strings.
I wanted to sort an ArrayList of custom objects by one of their properties: a Date object
(getStartDay()
). Normally I compare them by item1.getStartDate().before(item2.getStartDate())
so I was wondering whether I could write something like:
public class CustomComparator {
public boolean compare(Object object1, Object object2) {
return object1.getStartDate().before(object2.getStartDate());
}
}
public class RandomName {
...
Collections.sort(Database.arrayList, new CustomComparator);
...
}
Best Answer
Since
Date
implementsComparable
, it has acompareTo
method just likeString
does.So your custom
Comparator
could look like this:The
compare()
method must return anint
, so you couldn't directly return aboolean
like you were planning to anyway.Your sorting code would be just about like you wrote:
A slightly shorter way to write all this, if you don't need to reuse your comparator, is to write it as an inline anonymous class:
Since java-8
You can now write the last example in a shorter form by using a lambda expression for the
Comparator
:And
List
has asort(Comparator)
method, so you can shorten this even further:This is such a common idiom that there's a built-in method to generate a
Comparator
for a class with aComparable
key:All of these are equivalent forms.