Como ordenar um ArrayList de objetos?

Pessoal

Eu não estou conseguindo ordenar a Lista … :frowning:
alguem pode me ajudar ?

por exemplo:

tenho um objeto chamado TIMEDEFUTEBOL.

TIMEDEFUTEBOL tem como atributos:
int numCampeonatosBrasileiros;
int numCampenatosMundial;
String nome;

Tenho minha Lista:
List equipes = new ArrayList();

como eu posso ordenar a List equipes por numCampeonatosBrasileiros ??

o resultado ja sabemos: Flamengo e São Paulo vão ficar no topo rsrsrs…
mas serio, eu to ha um tempão tentando fazer isso e tenho que comitar essa implementação ainda hoje…

se alguem puder me ajudar
Obrigado
Julio

Voce pode usar o metodo sort()
Collections.sort(list);

nem lembro se eh assim msm…
:?

Kra, que eu saiba, a List já ordena automaticamente os índices quando vc chama o método add()…

Ao usar Collections.sort( seuObjeto ), vai acontecer a ordenação natural… pra objetos String sabemos que é a ordem alfabetica, pra um objeto Number por exemplo sabemos que e a ordem crescente… mas, e pra objetos TIMEDEFUTEBOL? qual é a ordem natural?

O Java nao sabe, entao vc vai te q dizer a ele… para isso, faça seu objeto implementar a interface Comparable, que vai te forçar a implementar o metodo compareTo( Object outroObjeto )… entao nesse metodo vc define que um objeto e maior do q o outro se seu atributo X tem valor maior…

Ou… vc pode criar varios “Comparadores” (Comparator), e entao usar o metodo sobrecarregado Collecions.sort( objeto, comparador ) pra poder comparar seu objeto de varias maneiras possiveis.

Crie um Comparator.

E a propósito, classes são nomeadas em “Pascal Case”, ou seja: TimeDeFutebol.

Um exemplo:

List<TimeDeFutebol> equipes = new ArrayList<TimeDeFutebol>();

Collections.sort (equipes, new ComparadorDeTimes());

E a classe ComparadorDeTimes é assim:

class ComparadorDeTimes implements Comparator<TimeDeFutebol> {
    public int compare(TimeDeFutebol o1, TimeDeFutebol o2) {
        if (o1.numCampeonatosBrasileiros < o2.numCampeonatosBrasileiros) return -1;
        else if (o1.numCampeonatosBrasileiros > o2.numCampeonatosBrasileiros) return +1;
        else return 0;
    }
}
1 curtida

List preserva a ordem de inserção; mas ele quer que fiquem ordenados pelo número de campeonatos brasileiros, que é uma coisa diferente.

to travado…
olha so o que eu tenho

public class BrokerConfigAction extends AdminAction {
        .
        .
        .
       private List<SinacorPortfolio> portfoliosViewDefault;
       .
       .
       .
       //lancei essa innerclass
       public class ComparableSP implements Comparator<SinacorPortfolio>{

		@Override
		public int compare(SinacorPortfolio o1, SinacorPortfolio o2) {
			// 
			return 0;
		}
		
	}
        .
        .
        .
        //populei minha lista
        for (SinacorPortfolio sp : portfolios) {
		portfoliosViewDefault.add(sp);
	}
        // e agora eu tenho que ordena-la por id
       //entao agora estou pensando nisso...
       ComparableSP c = new ComparableSP();
	Collections.sort(portfoliosViewDefault, c);

}

pode me ajudar … ?
abraços

releia o exemplo que thingol te deu.

Vleu fabiocs , thingol , rdgms e Rage

FUNCIONOU, e ja comitei :slight_smile:

valeu mesmo!

abraços

Julio