Como ordenadar uma lista de SelectItems
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.
No meu bean tenho o código abaixo para a lista.
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
Curtidas 0
Melhor post
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:
Não é a melhor ideia usar o compare() dentro do seu Bean, o ideal seria criar um comparator personalizado fora do seu bean.
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
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:
Não é a melhor ideia usar o compare() dentro do seu Bean, o ideal seria criar um comparator personalizado fora do seu bean.
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
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:
Não é a melhor ideia usar o compare() dentro do seu Bean, o ideal seria criar um comparator personalizado fora do seu bean.
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
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:
Não é a melhor ideia usar o compare() dentro do seu Bean, o ideal seria criar um comparator personalizado fora do seu bean.
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
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.
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
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.
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
16/04/2015
Sim, o ideal é criar algo como:
Depois você usa o ComparadorMarca dentro do sort().
public class ComparadorMarca implements Comparable{
...
}
Depois você usa o ComparadorMarca dentro do sort().
GOSTEI 1
Miguel Neto
16/04/2015
Sim, o ideal é criar algo como:
Depois você usa o ComparadorMarca dentro do sort().
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