java.util.Comparator è un'interfaccia che espone 2 metodi:
- compare(T t1, T t2)
- equals(Object o)
Quindi, per avere un oggetto di tipo Comparator dovrai scrivere una classe (è la via più semplice) che implementa tale interfaccia, per un determinato tipo di oggetto T (il tipo di oggetti contenuti nel tuo ArrayList).
Chiaramente, dovrai fornire una implementazione di tali metodi che ne soddisfi il loro contratto:
- compare(T t1, T t2) ritorna un intero con le seguenti caratteristiche:
< 0: se t1 è "minore" di t2 (ovvero, se nell'ordinamento, t1 viene prima di t2)
= 0: se t1 e t2 sono "uguali" (ovvero, se nell'ordinamento, nessuno dei due viene prima dell'altro)
> 0: se t1 è "maggiore" di t2 (ovvero, se nell'ordinamento, t1 viene dopo di t2)
-equals(Object o) ritorna true se l'oggetto "this" è uguale all'oggetto passato come parametro.
Ovviamente, il metodo sort() di Collections usa il metodo compare() del Comparator.
Se viene passato "null" come oggetto Comparator, il metodo sort() usa l'ordinamento naturale degli oggetti (chiaramente, gli oggetti devono implementare Comparable, un'altra interfaccia simile a Comparator, ma che prevede solo il metodo compareTo() con le stesse caratteristiche di compare() ).
Come oggetto "comparator" si può usare anche uno qualunque degli oggetti della lista, se questi oggetti implementano a loro volta Comparator.
Ciao.![]()