Say we are working on a class representing a Person by their first and last names. We have created a basic class to do this and implemented proper equals and hashCode methods.
public class Person {
private final String lastName; //invariant - nonnull
private final String firstName; //in...
List.sortWith allows you to sort lists with data of any shape - you supply it with a comparison function.
compareBools : Bool -> Bool -> Order
compareBools a b =
case (a,b) of
(False, True) ->
LT
(True, False) ->
GT
_ ->
...
There are two Collections.sort() methods:
One that takes a List<T> as a parameter where T must implement
Comparable and override the compareTo() method that determines
sort order.
One that takes a List and a Comparator as the arguments, where the
Comparator determines the sort order.
...
For given type Person:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Clothes { get; set; }
}
List<Person> persons = new List<Person>
{
new Person{ Name = "Jon", Age = 20, Clothes = "some clothes...
Comparator.comparing(Person::getName)
This creates a comparator for the class Person that uses this person name as the comparison source.
Also it is possible to use method version to compare long, int and double. For example:
Comparator.comparingInt(Person::getAge)
Reversed order
To create ...
Comparator cmp = [ compare:{ a, b -> a <=> b } ] as Comparator
def col = [ 'aa', 'aa', 'nn', '00' ]
SortedSet sorted = new TreeSet( cmp )
sorted.addAll col
assert '[00, aa, nn]' == sorted.toString()