Fórum Como ordenadar uma lista de SelectItems #517004

16/04/2015

0

Tenho uma classe Marca que possui 2 atributos (idMarca e nome) essa classe implementa a interface Comparator e possui o método compare do tipo int.



public class Marca implements Serializable, Comparator<Marca>{
	
	private Long idMarca;
	private String nome;


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((idMarca == null) ? 0 : idMarca.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Marca other = (Marca) obj;
		if (idMarca == null) {
			if (other.idMarca != null)
				return false;
		} else if (!idMarca.equals(other.idMarca))
			return false;
		return true;
	}
	
	
	@Override
	public int compare(Marca marca, Marca outra) {
		return marca.getNome().compareTo(outra.getNome());
	}




No meu bean tenho o código abaixo para a lista.

public class ProdutoBean implements Serializable {
	
	private static final long serialVersionUID = 1L;
	
	private MarcaDAO marcaDao = new MarcaDAO();
	private List<SelectItem> marcas = new ArrayList<SelectItem>();
	private Long marcaSelecionada;
	
	public List<SelectItem> getMarcas() {
		List<Marca> lista = marcaDao.todos();
		Collections.sort(lista, marcas);
		for(Marca m : lista){
			marcas.add(new SelectItem(m.getIdMarca(), m.getNome()));
		}
		return marcas;
	}

}






Miguel Neto

Miguel Neto

Responder

Post mais votado

16/04/2015

Creio que sua ideia sobre como funciona o Collections.sort() está errada. Este método recebe uma lista de elementos a serem ordenadas e o comparator que deve ser usado.

No seu caso o correto seria:

Collections.sort(lista, new Marca());


Não é a melhor ideia usar o compare() dentro do seu Bean, o ideal seria criar um comparator personalizado fora do seu bean.

Ronaldo Lanhellas

Ronaldo Lanhellas
Responder

Gostei + 1

Mais Posts

16/04/2015

Ronaldo Lanhellas

Creio que sua ideia sobre como funciona o Collections.sort() está errada. Este método recebe uma lista de elementos a serem ordenadas e o comparator que deve ser usado.

No seu caso o correto seria:

Collections.sort(lista, new Marca());


Não é a melhor ideia usar o compare() dentro do seu Bean, o ideal seria criar um comparator personalizado fora do seu bean.
Responder

Gostei + 0

16/04/2015

Ronaldo Lanhellas

Creio que sua ideia sobre como funciona o Collections.sort() está errada. Este método recebe uma lista de elementos a serem ordenadas e o comparator que deve ser usado.

No seu caso o correto seria:

Collections.sort(lista, new Marca());


Não é a melhor ideia usar o compare() dentro do seu Bean, o ideal seria criar um comparator personalizado fora do seu bean.
Responder

Gostei + 1

16/04/2015

Miguel Neto

Creio que sua ideia sobre como funciona o Collections.sort() está errada. Este método recebe uma lista de elementos a serem ordenadas e o comparator que deve ser usado.

No seu caso o correto seria:

Collections.sort(lista, new Marca());


Não é a melhor ideia usar o compare() dentro do seu Bean, o ideal seria criar um comparator personalizado fora do seu bean.




Poderia exemplificar? Sou novo em Java ainda estou aprendendo rsss.
Responder

Gostei + 0

16/04/2015

Ronaldo Lanhellas

É exatamente como lhe falei. O método sort() deve receber 2 argumentos:

1 - Uma lista para ser ordenada;
2 - Uma classe que implemente a interfcae Comparator, pois o método sort() usa o método compare() da interface Comparator.
Responder

Gostei + 0

16/04/2015

Miguel Neto

É exatamente como lhe falei. O método sort() deve receber 2 argumentos:

1 - Uma lista para ser ordenada;
2 - Uma classe que implemente a interfcae Comparator, pois o método sort() usa o método compare() da interface Comparator.




Não quanto a isso entendi, e funcionou obrigado. Estou dizendo a respeito de você ter dito que não é a melhor ideia usar o compare() dentro do seu Bean, o ideal seria criar um comparator personalizado fora do seu bean.

O comparator eu implementei na minha classe de modelo está errado?
Responder

Gostei + 0

16/04/2015

Ronaldo Lanhellas

Sim, o ideal é criar algo como:

public class ComparadorMarca implements Comparable{
 ...
}


Depois você usa o ComparadorMarca dentro do sort().
Responder

Gostei + 1

17/04/2015

Miguel Neto

Sim, o ideal é criar algo como:

public class ComparadorMarca implements Comparable{
 ...
}


Depois você usa o ComparadorMarca dentro do sort().




Entendi, é verdade o código ficará até mais legível. Vlw
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar