Java e il problema dell'ordinamento Offrontiamo il problema dell'ordinamento in Java. |
SORT A LIST
Il primo problema che andremo ad affrontare è l'ordinamento di una Lista in Java. Ma non un ordinamento qualsiasi bensì un ordinamento case-insensitive. Ovvero, un ordinamento che non deve fare distinzione tra caratteri minuscoli e caratteri maiuscoli.
L'ordinamento lo si fa semplicemente così:
List<MioOggetto> miaLista = new LinkedList<MioOggetto>();
[...]
Collections.sort(miaLista, new CaseInsensitiveComparator());
In questo esempio abbiamo una lista di oggetti qualsiasi che vogliamo ordinare.
Per farlo è sufficiente chiamare il metodo sort() della classe Collection.
Naturalmente dato che abbiamo a che fare con oggetti bisogna implementare il Comparator per istruire il linguaggio a fare il confronto tra oggetti.
Il comparator sarà così:
import java.text.CollationKey;
import java.text.Collator;
import java.util.Comparator;
/**
* Classe per l'ordinamento case insensitive.
*
*/
public class CaseInsensitiveComparator implements Comparator {
Collator collator = Collator.getInstance();
public int compare(Object element1, Object element2)
{
CollationKey key1 = null;
CollationKey key2 = null;
if(element1 instanceof MioOggetto && element2 instanceof MioOggetto)
{
key1 = collator.getCollationKey(((MioOggetto)element1).getNome());
key2 = collator.getCollationKey(((MioOggetto)element2).getNome());
}
else
{
key1 = collator.getCollationKey(element1.toString());
key2 = collator.getCollationKey(element2.toString());
}
return key1.compareTo(key2);
}
}
Importantissimo l'uso delle Collation per ragioni di efficienza.