Caro amigo.
Estou tendo um pequeno problema para ordenar alfabeticamente a minha classe Cidade.
O seguinte código foi implementado por mim:
public List<Cidade> getMunicipios(Long filiadoAssociadoId) {
FiliadoAssociado filiadoAssociado = (FiliadoAssociado) createCriteria(FiliadoAssociado.class).add(Restrictions.eq(“id”, filiadoAssociadoId)).uniqueResult();
List<Cidade> cidades = new ArrayList();
if (filiadoAssociado.getExtensoesDeBase() != null) {
cidades.addAll(filiadoAssociado.getExtensoesDeBase());
}
cidades.add(filiadoAssociado.getEndereco().getCidade());
Collections.sort(cidades);
return cidades;
}
O resultado sendo visto num select em HTML é justamente o incorreto, ou seja, não houve a ordenação correta.
Na classe Cidade.java esta implementado Comparable<Cidade> e também o método compareTo da seguinte forma:
public int compareTo(Cidade cidade) {
/*
if (this.nome.compareTo(cidade.nome) < 0) {
return -1;
} else if (this.nome.compareTo(cidade.nome) > 0) {
return 1;
} else {
return 0;
}
*/
return this.nome.compareTo(cidade.nome);
}
O que devo fazer para ter o resultado correto ?
Deveria utilizar o SortedSet + TreeSet ao invéz do List + ArrayList ?
Muito grato
Olá, uma pergunta… Terás elementos repetidos nessa Lista ? Se a resposta for NAO entao aconselharia tu usar a classe TreeSet, pois elá conforme insersão já vai ordenando pra ti. Se a resposta for não, teras que criar uma classe usando a Interface Comparable e Reescrever o método compare. :joia:
Só uma observação.
A interface Compareble o método é o compareTo.
[code] package java.lang;
public interface Comparable {
public int compareTo(T o);
}[/code]
O método compare se refere a interface Comparator.
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
}
Ok
:brinde:
Obrigado pela OBS :joia: Faz tempo que implementei isso, e tinha esquecido os nomes certinhos. :lol:
Bom pessoal, fiz a implementação no método compareTo da seguinte forma:
public int compareTo(Cidade cidade) {
return this.nome.compareToIgnoreCase(cidade.nome);
}
E modifiquei o meu GetMunicipios para:
public SortedSet<Cidade> getMunicipios(Long filiadoAssociadoId) {
FiliadoAssociado filiadoAssociado = (FiliadoAssociado) createCriteria(FiliadoAssociado.class).add(Restrictions.eq("id", filiadoAssociadoId)).uniqueResult();
SortedSet<Cidade> cidades = new TreeSet();
if (filiadoAssociado.getExtensoesDeBase() != null) {
cidades.addAll(filiadoAssociado.getExtensoesDeBase());
}
cidades.add(filiadoAssociado.getEndereco().getCidade());
[b]System.out.println(cidades);[/b]
return cidades;
}
Com o breakpoint fui depurar o resultado e percebi que a ordenação esta correta, vejam:
[Id: 94, Nome: ADAMANTINA , Id: 1, Nome: AREIAS , Id: 215, Nome: MARIAPOLIS ]
Mas ao ser apresentado no select HTML o seguinte resultado esta sendo apresentado:
AREIAS
ADAMANTINA
MARIAPOLIS
O que pode esta dando de errado, coisa bizarra.
Não tenho nada de excepcional no código HTML.
Pessoal já encontrei o problema…
Eram métodos duplicados (bobeira minha) desculpem!
Desde já agradeço todas as dicas e conselhos.