tituloCategorias.add(categoria.getTitle()); qtdConteudos.add(new Integer(qtd)); Collections.sort(qtdConteudos);qtdConteudos.get(qtdConteudos.size() - 1); // Ordena lista em ordem crescenteCollections.reverse(qtdConteudos); // Decrescente%><%=tituloCategorias+" ("+qtdConteudos.get(i)+")"%><br/>
Ex:
Agua (35)
Esgoto (47)
Empresa (72)
Quando ordeno a de inteiros em ordem decrescente fica assim
Mas e se eu quiser usar o CompareTo para organizar por ordem decrescente
ou seja pela quantidade e Não pelo nome???
Desde Já!
muito obrigado Dirceu
rsakurai
Se vc tem mais de uma forma de ordenação, acho mais interessante criar uma classe separada para cada tipo de ordenação e implementar a interface Comparator.
DirceuSobrinho
Para organizar em ordem decrescente, basta multiplicar o resultado por (-1)
Exemplo:
public int compareTo(tiposInformacao o) {
return (-1) * this.nome.compareTo(o.nome);
}
Para orderna de acordo com a quantidade, é so substituir nome, por quantidade;
exemplo:
public int compareTo(tiposInformacao o) {
return (-1) * this.quantidade.compareTo(o.quantidade);
}
R
Roberto_Porto
Sim vou fazer isso!
mas em para ordenar pela quantidade em ordem decrescente sigo a mesma linha de raciocinio???
por ordem alfabetica eu ja imaginava como seria
gostaria de saber como é em ordem DECRESCENTE ultilizando compareTo
Obrigado =)
R
Roberto_Porto
OBRIGADOO DIRCEU!!!
ERA O PULO DO GATO QUE FALTAVA PARA MIM!!!
ABRAÇOO PESSOAL
R
Roberto_Porto
public int compareTo(Lista o) {
return (-1) * this.quantidade.compareTo(o.quantidade);
}
fiz dessa forma! aparentemente rola mas da um erro em
this.quantidade.compareTo(o.quantidade);
B
Bruno_Laturner
Roberto Porto:
public int compareTo(Lista o) {
return (-1) * this.quantidade.compareTo(o.quantidade);
}
fiz dessa forma! aparentemente rola mas da um erro em
this.quantidade.compareTo(o.quantidade);
Que erro? this.quantidade foi inicalizado? Ele é um Integer ou um int?
R
Roberto_Porto
Ele é do tipo int cara!
sim ja foi iniciado mas no momento possui apenas um número!
não sei se tem haver o fato de ter somente um numero e com isso ngm para ele comparar?? =/
DirceuSobrinho
substitua int por Integer
int é um tipo primitivo e logo não possui métodos, então não possui o método compareTo().
Acho se substituir int por Integer funfa blz!
R
Roberto_Porto
CARA NA MOSCA! HEHEHEHE!
FUNCIONOU QUE FOI UMA BELEZAAAA!!!
MUITO OBRIGADO PESSOAL
GRANDE AGRAÇO
B
Bruno_Laturner
Se quiser aproveitar ao máximo a linguagem e a API:
importjava.text.Collator;importjava.util.Comparator;importjava.util.Locale;publicclassTipoInformacaoimplementsComparable<TipoInformacao>{privateStringnome;privateintqtde;publicstaticfinalComparator<TipoInformacao>ORDENAR_POR_QTDE=newComparator<TipoInformacao>(){publicintcompare(TipoInformacaoo1,TipoInformacaoo2){returno1.qtde-o2.qtde;}};publicTipoInformacao(Stringnome,intqtde){if(nome==null)thrownewIllegalArgumentException("Nome não deve ser nulo.");this.nome=nome;this.qtde=qtde;}// Comparações com acento. Obrigado thingol!finalstaticCollatorcollator=Collator.getInstance(newLocale("pt","BR"));static{collator.setStrength(Collator.PRIMARY);// importante! }publicintcompareTo(TipoInformacaoo){returncollator.compare(this.nome,o.nome);}@OverridepublicStringtoString(){returnthis.nome+" ("+qtde+")";}}
importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;publicclassMain{publicstaticvoidmain(String[]args){TipoInformacaoagua=newTipoInformacao("Água",35);TipoInformacaoesgoto=newTipoInformacao("Esgoto",47);TipoInformacaoempresa=newTipoInformacao("Empresa",72);List<TipoInformacao>listaNormal=newArrayList<TipoInformacao>();listaNormal.add(agua);listaNormal.add(esgoto);listaNormal.add(empresa);System.out.println("Ordem normal: "+listaNormal);// cria uma nova lista com o conteúdo de outra lista, pois queremos deixar a lista normal quietaList<TipoInformacao>listaOrdenadaPorNome=newArrayList<TipoInformacao>(listaNormal);// ordena a lista, alterando ela.Collections.sort(listaOrdenadaPorNome);System.out.println("Ordem por nome: "+listaOrdenadaPorNome);List<TipoInformacao>listaOrdenadaInversamentePorNome=newArrayList<TipoInformacao>(listaNormal);// reverseOrder inverte a ordemCollections.sort(listaOrdenadaInversamentePorNome,Collections.reverseOrder());System.out.println("Ordem inversa por nome: "+listaOrdenadaInversamentePorNome);List<TipoInformacao>listaOrdenadaPorQtde=newArrayList<TipoInformacao>(listaNormal);// aqui ordenamos usando um comparador da classeCollections.sort(listaOrdenadaPorQtde,TipoInformacao.ORDENAR_POR_QTDE);System.out.println("Ordem inversa por qtde: "+listaOrdenadaPorQtde);List<TipoInformacao>listaOrdenadaInversamentePorQtde=newArrayList<TipoInformacao>(listaNormal);// comparador inversoCollections.sort(listaOrdenadaInversamentePorQtde,Collections.reverseOrder(TipoInformacao.ORDENAR_POR_QTDE));System.out.println("Ordem inversa por qtde: "+listaOrdenadaInversamentePorQtde);}}
Ordem normal: [Água (35), Esgoto (47), Empresa (72)]
Ordem por nome: [Água (35), Empresa (72), Esgoto (47)]
Ordem inversa por nome: [Esgoto (47), Empresa (72), Água (35)]
Ordem inversa por qtde: [Água (35), Esgoto (47), Empresa (72)]
Ordem inversa por qtde: [Empresa (72), Esgoto (47), Água (35)]