Como ordenadar uma lista de SelectItems

Java

16/04/2015

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

Curtidas 0

Melhor post

Ronaldo Lanhellas

Ronaldo Lanhellas

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.
GOSTEI 1

Mais Respostas

Ronaldo Lanhellas

Ronaldo Lanhellas

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.
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

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.
GOSTEI 1
Miguel Neto

Miguel Neto

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.




Poderia exemplificar? Sou novo em Java ainda estou aprendendo rsss.
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

16/04/2015

É 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.
GOSTEI 0
Miguel Neto

Miguel Neto

16/04/2015

É 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?
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

16/04/2015

Sim, o ideal é criar algo como:

public class ComparadorMarca implements Comparable{
 ...
}


Depois você usa o ComparadorMarca dentro do sort().
GOSTEI 1
Miguel Neto

Miguel Neto

16/04/2015

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
GOSTEI 0
POSTAR