Newsgroup: it.comp.java
Titolo: Ordinare Collection

sarà che mi sono arruginito, eppure non trovo un modo per ordinare,
direttamente, un oggetto di tipo Collection.
Voglio dire, vedo che Collections.sort ordina List, ma se io ho un
oggeto Collection<Pippo>, debbo insomma prima convertirlo in List?
E se è già un List?
Che faccio, testo con instanceof per controllare? (quando vedo
instanceof penso che ci sia sempre qualcosa che non va)
-- 
Herbie

Herbie ha scritto:

La classe Pippo può implementare  l'interfaccia Comparable e poi 
richiamare Collection.sort oppure puoi crearti una o più classi che 
implementano Comparator a seconda che sei interessato ad un solo tipo di 
ordinamento o a più ordinamenti e poi passare la classe di ordinamento 
che ti interessa a Collection.sort.
Ciao

 che ti interessa a Collection.sort.
Quello che dici lo sapevo, ciò che intendevo dire è se, per ordinare un
oggetto che è una Collection, devo castarla a List (sempre che lo sia),
oppure proprio convertirla. Il problema è che Collections.sort ordina 
List e non Collection
-- 
Herbie


Non puoi ordinare una generica Collection, ma solo una List, perché la
differenza semantica tra Collection e List consiste proprio nel fatto
che List mantiene e garantisce l'ordinamento, mentre Collection no
(l'Iterator associato ad una Collection, che puoi ottenere invocando
su di essa il metodo iterator(), non garantisce che l'ordine di
iterazione sia sempre il medesimo).
Non ha dunque senso porsi il problema di "ordinare una Collection",
giacché per definizione di Collection non esiste un ordine associato
ad essa.
Se per te l'ordine conta, ciò che ti serve è una List (che puoi
ordinare) e non una più generica Collection.
Buona giornata!

 che List mantiene e garantisce l'ordinamento, 
ok, giusto.
Il mio "problema" è che ho un metodo di una libreria che restituisce una
Collection, e voglio stamapre questa collection ordinata. La Collection
restituita potrebbe essere una List, ma io non lo so perché ho il suo
supertipo. Che faccio, come dicevo, casto a List se instanceof List da
true, o altrimenti costrusco una list? Oppure come ho fatto adesso
prendo il toArray() dalla collection e lo ordino con Arrays.sort?
-- 
Herbie

 prendo il toArray() dalla collection e lo ordino con Arrays.sort?
Come possiamo darti una risposta? Solo tu puoi sapere il contesto di 
utilizzo.
Noi possiamo dirti che castare a List è lecito (perché avevi dubbi poi?) 
, ed anche l'uso di Arrays.sort.
Solo che l'ultimo di tornerà un array ordinato, che nulla a che fare con 
la struttura dati originaria (la Collection). Quindi dipende dal tuo 
programma.
-- 
Il CGI secondo Radicale: una specie di linguaggio per fare query su 
siti,internet.

 prendo il toArray() dalla collection e lo ordino con Arrays.sort?
List yourSortedList = new ArrayList(yourCollection);
Collections.sort(yourSortedList, yourComparator);
se poi la tua collection ha la caratteristica del Set allora è ancora più 
semplice passando dal TreeSet che è già "intrinsecamente" ordinato.


Concordo con rootkit, il miglior modo è wrappare la tua collection in
una List.
Solo una piccola nota (OT). Proprio oggi ho letto un articolo riguardo
a Guava, una libreria generica (nel senso che si occupa non di un
argomento specifico, ma 'estende' le lib jre) scritta da Google che
fra le altre ha una interessante classe fluent riguardante
l'ordinamento. L'url è 
http://jnb.ociweb.com/jnb/jnbApr2010.html
permette di fare cose tipo:
        public int compareTo(Object o) {
            Person other = (Person) o;
            return ComparisonChain.start().
                    compare(birthYear, other.birthYear).
                    compare(birthMonth, other.birthMonth).
                    compare(birthDayOfWeek, other.birthDayOfWeek).
                    compare(firstName, other.firstName).
                    result();
        }
yummm!

 yummm!
ma non è la stessa cosa che fa già la libreria commons.lang?