Salve a tutti,
io ho un arraylist di oggetti e richiamo il metodo Collection.sort(<ArrayList>, <Comparator_Class>), ma vi viene fuori un array list con gli elementi tutti uguali.
Come si usa questa funzione di Java ?
Salve a tutti,
io ho un arraylist di oggetti e richiamo il metodo Collection.sort(<ArrayList>, <Comparator_Class>), ma vi viene fuori un array list con gli elementi tutti uguali.
Come si usa questa funzione di Java ?
Non ci sono Queen senza Freddie !
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.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Io ai tempi ho fatto così
dovevo comparare dei "minuti" che erano stati per qualche motivo memorizzati nel DB come stringhe. a tal proposito dovevo prendere i primi due caratteri (o solo 1 se il minuto e tra l'1 e il 9) e comparli per capire quale veniva primo....codice:LinkedList<Scores>ls=lnk.getSegnatureMatch(partita.getIdPartita()); Collections.sort(ls, new ScoresComparator()); ---------------------------------------------------------- import java.util.Comparator; class ScoresComparator implements Comparator<Scores> { public int compare(Scores sc1, Scores sc2){ Scores s1=sc1; Scores s2=sc2; int golprima1=0; int golprima2=0; int incasa1=Integer.parseInt(s1.getName()); if(s1.getMinuto().length()>=2) golprima1=Integer.parseInt(s1.getMinuto().substring(0,2)); else golprima1=Integer.parseInt(s1.getMinuto().substring(0,1)); int incasa2=Integer.parseInt(s2.getName()); if(s2.getMinuto().length()>=2) golprima2=Integer.parseInt(s2.getMinuto().substring(0,2)); else golprima2=Integer.parseInt(s2.getMinuto().substring(0,1)); if(incasa1<incasa2 && golprima1<golprima2) return 1; else return 0; } }
I computer sono incredibilmente veloci, accurati e stupidi.
Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
Insieme sono una potenza che supera l'immaginazione.
A.Einstein