PDA

View Full Version : [java] ordinare arraylist


blindwrite
24-01-2009, 01:01
ho questa classe:
public class Evaluation {

ArrayList<Researcher> researchers;
ArrayList <Journal>journals;
}
devo ordinare l'ArrayList journals, ho scritto questo codice
public Collection<Journal> getJournalsByIF(){

Collections.sort(journals);
return journals;
}
la classe Journal implementa Comparable
public class Journal implements Comparable<Journal>{

private String issn;
private String title;
private double impactfactor;
ArrayList <Article>articles;
}
e ho creato i metodo compareTo
public int compareTo(Journal o) {
double compare = o.impactfactor - this.impactfactor;
return (int)compare;
}

Non funziona, e non capisco cosa ci sia di sbagliato!!
chi mi può dare una mano chiarificandomi cosa sbaglio concettualmente??
grazie

Don[ITA]
24-01-2009, 01:52
In che senso non funziona?
Non ti ordina il tuo ArrayList, o te lo ordina in modo scorretto?

Saluti

andbin
24-01-2009, 11:02
e ho creato i metodo compareTo
public int compareTo(Journal o) {
double compare = o.impactfactor - this.impactfactor;
return (int)compare;
}Innanzitutto non è corretto, per via della sottrazione e del cast a int. Metti di avere due numeri 0.3 e 0.5, il risultato di compareTo è 0 ... non mi sembra proprio corretto!

Poi compareTo deve ritornare:
< 0 se this < altroOggetto
> 0 se this > altroOggetto
= 0 se this = altroOggetto

Chiaramente sei anche libero di "girare" la cosa al contrario se vuoi l'ordinamento inverso.

Nel tuo codice se o.impactfactor=10 e this.impactfactor=2 tu ritorneresti > 0 e quindi l'oggetto con il 2 verrebbe visto come "più grande" di quello con il 10. Volevi proprio così??

blindwrite
24-01-2009, 12:50
Innanzitutto non è corretto, per via della sottrazione e del cast a int. Metti di avere due numeri 0.3 e 0.5, il risultato di compareTo è 0 ... non mi sembra proprio corretto!

Poi compareTo deve ritornare:
< 0 se this < altroOggetto
> 0 se this > altroOggetto
= 0 se this = altroOggetto

Chiaramente sei anche libero di "girare" la cosa al contrario se vuoi l'ordinamento inverso.

Nel tuo codice se o.impactfactor=10 e this.impactfactor=2 tu ritorneresti > 0 e quindi l'oggetto con il 2 verrebbe visto come "più grande" di quello con il 10. Volevi proprio così??

Grazie mille sono davvero uno stupido!!
Ho perso ore per una cavolata del genere!!
è proprio vero che le cose più banali sono quelle che ti portano via più tempo.
Grazie ancora!!!