Problema na ordenação com List

5 respostas
S

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

5 Respostas

C

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:

F

Só uma observação.

A interface Compareble o método é o compareTo.

package java.lang;
 
 public interface Comparable<T> {
     public int compareTo(T o);
 }

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:

C

Obrigado pela OBS :joia: Faz tempo que implementei isso, e tinha esquecido os nomes certinhos. :lol:

S

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.

S

Pessoal já encontrei o problema…
Eram métodos duplicados (bobeira minha) desculpem!

Desde já agradeço todas as dicas e conselhos.

Criado 16 de janeiro de 2007
Ultima resposta 16 de jan. de 2007
Respostas 5
Participantes 3