Bom dia pessoal
Estou precisando ordenar uma lista, só que a ordenação tem que ser feita através de 2 campos.
O Objeto tem 2 campos um é uma string e o outro é uma ligação à própria classe.
public class Grupo implements Comparable<Grupo> {
private String descricao;
private Grupo grupo;
//gets e sets
@Override
public int compareTo(Grupo o) {
return (descricao != null ? descricao.compareTo(o.descricao) : 0);
}
}
o código acima mostra que a comparação é feita pela descrição… o problema que eu preciso que a ordenação seja feita assim:
Grupo A
Subgrupo A
Subgrupo A2
Grupo B
Subgrupo B
alguém pode me ajudar?
oLa, imagino que voce tenha que incluir em seu compareTo() uma condicao para ordenacao do subgrupo, algo como:
public class Grupo implements Comparable<Grupo> {
private String descricao;
private Grupo grupo;
//gets e sets
@Override
public int compareTo(Grupo o) {
int compare=0;
if(o != null && o.descricao != null){
if(o.grupo.descricao != null)//incluindo uma condicao para a comparacao do subgrupo
compare = descricao.compareTo(o.descricao+o.grupo.descricao);//comparando grupo e subgrupo
else
compare = descricao.compareTo(o.descricao);//caso nao tenha comparacao para o subgrupo
}
return compare;
}
}
Ate mais!
Cara muito boa a sua idéia!!!
eu so alterei uma coisa, eu invertir a string, colocando a descricação do grupo antes do subgrupo:
@Override
public int compareTo(Grupo o) {
String compStr = (o.grupo != null ? o.grupo.descricao : "") + o.descricao;
return (descricao != null ? descricao.compareTo(compStr) : 0);
}
mas deu certinho valeu
Um ultimo comentario, voce tera problemas com java.langNUllPointerException quando fizer o.descricao! Acho legal voce tratar esse caso.
ate
Valeu … vou controlar isso ai…
obrigado